LeetCode पर PHP: साक्षात्कार की तैयारी में एक अप्रत्याशित लेकिन शक्तिशाली सहयोगी
\n\nजब आप "LeetCode" सुनते हैं, तो आमतौर पर Java, Python या C++ दिमाग में आते हैं। PHP इस सूची में बाहरी लगता है। लेकिन अगर आप PHP में लिखते हैं और बढ़ना चाहते हैं — एक साधारण "स्क्रिप्टर" से लेकर एक इंजीनियर तक जो उच्च-लोड सिस्टम डिज़ाइन करता है — तो आपको निश्चित रूप से LeetCode को PHP पर पार करना होगा।
\n\nक्यों? क्योंकि LeetCode सिंटैक्स के बारे में नहीं है। यह एल्गोरिदमिक सोच के बारे में है। और PHP, अपनी वेब-विशिष्टता के बावजूद, आपको ऐरे, स्ट्रिंग, ट्री और ग्राफ के साथ काम करने के लिए बिल्कुल वही उपकरण देता है। बस थोड़े अलग सिंटैक्स और कुछ "अड़चनों" के साथ।
\n\nइस लेख में, हम चर्चा करेंगे कि किन विषयों को मजबूत करने की आवश्यकता है, LeetCode के लिए PHP में कुशल कोड कैसे लिखें, और वास्तविक समाधानों के उदाहरण दिखाएंगे। चलिए शुरू करते हैं!
\n\nPHP डेवलपर को LeetCode की आवश्यकता क्यों है?
\n\nबहुत से लोग सोचते हैं: "मैं PHP बैकएंड डेवलपर हूँ, मेरे लिए Laravel और SQL जानना काफी है।" यह एक जाल है। बड़ी कंपनियों (और केवल उनमें ही नहीं) में साक्षात्कार में, आपको बाइनरी सर्च या डायनेमिक प्रोग्रामिंग पर एक समस्या दी जाएगी। और यदि आप PHP में ऐसी समस्याओं को हल नहीं कर सकते, तो आपको नहीं लिया जाएगा, भले ही आप Symfony के गुरु हों।
\n\nLeetCode प्रशिक्षित करता है:
\n- \n
- एल्गोरिदम की जटिलता का विश्लेषण करने की क्षमता (Big O)। इसके बिना आप क्वेरी को ऑप्टिमाइज़ नहीं कर सकते या कुशल कतारें नहीं लिख सकते। \n
- गैर-मानक डेटा संरचनाओं के साथ काम करना — स्टैक, कतारें, हैश टेबल, ट्री। PHP में वे Java की तरह स्पष्ट नहीं हैं। \n
- कोड की स्वच्छता — आप अनावश्यक टेढ़े-मेढ़े समाधानों के बिना छोटे, समझने योग्य फंक्शन लिखना सीखते हैं। \n
और हाँ, LeetCode पर PHP — यह दस्तावेज़ीकरण का लिंक नहीं है। यह समाधान के लिए एक पूर्ण भाषा है। मुख्य बात इसकी विशेषताओं को जानना है।
\n\nशुरू करने से पहले क्या सीखना चाहिए?
\n\n1. ऐरे — PHP का मुख्य उपकरण
\nPHP में क्लासिकल लिस्ट या हैश टेबल नहीं हैं — ये सब ऐरे हैं। वे इंडेक्स्ड और एसोसिएटिव दोनों हो सकते हैं। यह शक्तिशाली है, लेकिन खतरनाक भी: आप गलती से कुंजियों के प्रकार मिला सकते हैं।
\n\nक्या महत्वपूर्ण है:
\n- \n
array_map(),array_filter(),array_reduce()— आपके सबसे अच्छे दोस्त। \n - सॉर्टिंग:
sort(),asort(),ksort()। याद रखें किsort()कुंजियों को रीसेट करता है। \n - कुंजी के अस्तित्व की जाँच:
isset()औरarray_key_exists()— एक ही बात नहीं हैं। \n
2. स्ट्रिंग और रेगुलर एक्सप्रेशन
\nPHP स्ट्रिंग फंक्शन के लिए प्रसिद्ध है। LeetCode पर अक्सर पैलिंड्रोम, एनाग्राम, कैरेक्टर काउंटिंग से संबंधित समस्याएँ आती हैं। str_split(), count_chars(), preg_match() का उपयोग करें (लेकिन अत्यधिक न करें — साक्षात्कार में वे रेगुलर एक्सप्रेशन के बिना पूछ सकते हैं)।
3. रिकर्सन और स्टैक
\nPHP में कोई बिल्ट-इन स्टैक नहीं है (SplStack है, लेकिन शायद ही कभी उपयोग किया जाता है)। अक्सर स्टैक को array_push() और array_pop() के साथ ऐरे के रूप में अनुकरण किया जाता है। रिकर्सन भी काम करता है, लेकिन गहराई पर ध्यान दें — डिफ़ॉल्ट रूप से सीमा 256 कॉल है।
4. क्लास और ऑब्जेक्ट
\nLeetCode अक्सर ऐसी समस्याएँ देता है जहाँ एक क्लास (स्टैक, कतार, LRU-कैश) को लागू करने की आवश्यकता होती है। PHP में यह private/protected प्रॉपर्टी वाले क्लास के माध्यम से किया जाता है। __construct() और टाइप हिंटिंग को न भूलें।
PHP के लिए LeetCode पर विशिष्ट समस्याएँ
\n\nआइए तीन लोकप्रिय समस्याओं पर चर्चा करें — सरल से मध्यम कठिनाई तक। कोड PHP में होगा, स्पष्टीकरण के साथ।
\n\nसमस्या 1: Two Sum (आसान)
\nशर्त: संख्याओं की एक सूची और एक लक्ष्य योग दिया गया है। दो संख्याओं के इंडेक्स खोजें जिनका योग target के बराबर हो।
\n\nहैश टेबल (एसोसिएटिव ऐरे) के माध्यम से समाधान:
\n\nfunction twoSum(array $nums, int $target): array {\n $map = []; // कुंजी — संख्या, मान — इंडेक्स\n \n foreach ($nums as $i => $