PHP على LeetCode: حليف غير متوقع لكنه قوي في التحضير للمقابلة
\n\nعندما تسمع "LeetCode"، عادةً ما تتبادر إلى الذهن Java أو Python أو C++. تبدو PHP في هذه القائمة كغريب. ولكن إذا كنت تكتب بلغة PHP وتريد النمو - من "كاتب نصوص" بسيط إلى مهندس يصمم أنظمة عالية التحميل - فأنت بالتأكيد بحاجة إلى المرور عبر LeetCode باستخدام PHP.
\n\nلماذا؟ لأن LeetCode لا يتعلق بالصياغة. إنه يتعلق بـ التفكير الخوارزمي. وPHP، بكل خصوصيتها في الويب، تمنحك نفس الأدوات تمامًا للعمل مع المصفوفات والسلاسل والأشجار والرسوم البيانية. فقط مع صياغة مختلفة قليلاً وبعض "المزالق".
\n\nفي هذه المقالة، سنحلل الموضوعات التي تحتاج إلى تعزيزها، وكيفية كتابة كود فعال بلغة PHP لـ LeetCode، وسنعرض أمثلة حقيقية للحلول. هيا بنا!
\n\nلماذا يحتاج مطور PHP إلى LeetCode؟
\n\nيعتقد الكثيرون: "أنا مطور خلفية بلغة PHP، يكفيني معرفة Laravel وSQL". هذا فخ. في المقابلات في الشركات الكبيرة (وليس فقط) سيُعطونك مهمة عن البحث الثنائي أو البرمجة الديناميكية. وإذا كنت لا تعرف كيفية حل هذه المهام بلغة PHP، فلن يتم توظيفك، حتى لو كنت خبيرًا في Symfony.
\n\nيدربك LeetCode على:
\n- \n
- القدرة على تحليل تعقيد الخوارزميات (Big O). بدون هذا، لن تتمكن من تحسين الاستعلامات أو كتابة قوائم انتظار فعالة. \n
- العمل مع هياكل بيانات غير تقليدية - الأكوام، قوائم الانتظار، جداول التجزئة، الأشجار. في PHP، ليست واضحة كما في Java. \n
- نقاء الكود - تتعلم كتابة دوال قصيرة وواضحة بدون دعائم غير ضرورية. \n
ونعم، PHP على LeetCode ليست رابطًا للتوثيق. إنها لغة كاملة للحلول. الشيء الرئيسي هو معرفة خصائصها.
\n\nما الذي يجب دراسته قبل البدء؟
\n\n1. المصفوفات - الأداة الرئيسية في PHP
\nلا توجد في PHP قوائم كلاسيكية أو جداول تجزئة - كل هذا عبارة عن مصفوفات. يمكن أن تكون مفهرسة أو ترابطية. هذا قوي، ولكنه خطير أيضًا: يمكنك خلط أنواع المفاتيح عن طريق الخطأ.
\n\nما هو مهم:
\n- \n
array_map()،array_filter()،array_reduce()- أفضل أصدقائك. \n - الترتيب:
sort()،asort()،ksort(). تذكر أنsort()يعيد تعيين المفاتيح. \n - التحقق من وجود المفتاح:
isset()وarray_key_exists()ليسا نفس الشيء. \n
2. السلاسل والتعبيرات المنتظمة
\nتشتهر PHP بدوال العمل مع السلاسل. في LeetCode، غالبًا ما تظهر مهام حول المتناظرات، الجناس الناقصة، عد الأحرف. استخدم str_split()، count_chars()، preg_match() (لكن لا تفرط في استخدامها - في المقابلة قد يطلبون بدون تعبيرات منتظمة).
3. العودية والكومة
\nلا توجد كومة مدمجة في PHP (SplStack موجودة ولكن نادرًا ما تستخدم). غالبًا ما يتم محاكاة الكومة باستخدام مصفوفة مع array_push() و array_pop(). العودية تعمل أيضًا، لكن راقب العمق - الحد الافتراضي هو 256 استدعاء.
4. الفئات والكائنات
\nغالبًا ما يعطي LeetCode مهامًا حيث تحتاج إلى تنفيذ فئة (كومة، قائمة انتظار، LRU-cache). في PHP، يتم ذلك من خلال فئات مع خصائص private/protected. لا تنسَ __construct() وتحديد الأنواع.
المهام النموذجية على LeetCode لـ PHP
\n\nدعنا نحلل ثلاث مهام شائعة - من البسيطة إلى المتوسطة التعقيد. سيكون الكود بلغة PHP مع الشروحات.
\n\nالمهمة 1: Two Sum (سهلة)
\nالشرط: مصفوفة أرقام ورقم هدف. ابحث عن فهارس الرقمين اللذين مجموعهما يساوي الهدف.
\n\nالحل باستخدام جدول التجزئة (مصفوفة ترابطية):
\n\nfunction twoSum(array $nums, int $target): array {\n $map = []; // المفتاح - الرقم، القيمة - الفهرس\n \n foreach ($nums as $i => $