PHP على LeetCode: أداة غير متوقعة لكنها قوية
\n\nعندما تسمع "LeetCode"، أول ما يتبادر إلى ذهنك هو Java أو Python أو C++. لكن لا تغلق علامة التبويب بسرعة. PHP ليست فقط للنماذج الإلكترونية وWordPress. PHP الحديثة (بدءًا من الإصدارين 7 و8) هي لغة كاملة لحل المشاكل الخوارزمية. إنها سريعة وموجزة، ودوالها المدمجة للتعامل مع المصفوفات والنصوص قد تتفوق على العديد من اللغات "التقليدية".
\n\nفي هذا المقال، سنشرح كيفية حل مشاكل LeetCode باستخدام PHP، وما هي هياكل البيانات والخوارزميات التي يجب دراستها، وسنقدم أمثلة كود حقيقية. ستكتشف لماذا PHP ليست "عيبًا" بل ميزة في المقابلات، وكيف تحول الروتين إلى مغامرة ممتعة.
\n\nلماذا تحل LeetCode باستخدام PHP؟
\n\nيعتقد الكثيرون أن PHP غير مناسبة للخوارزميات. هذه خرافة. إليك ثلاثة أسباب تجعل PHP خيارًا ممتازًا:
\n\n- \n
- مكتبة قياسية غنية:
array_map،array_filter،array_reduce،explode— هذه لبنات جاهزة لـ 80% من المشاكل. \n - نظام كتابة مرن: يمكنك التبديل بسرعة بين النصوص والأرقام والمصفوفات دون كتابة كود زائد. \n
- السرعة: PHP 8 مع مترجم JIT تُظهر نتائج مماثلة لـ Python، بل وأسرع أحيانًا. \n
علاوة على ذلك، إذا كنت مطور PHP، فإن حل مشاكل LeetCode يطور تفكيرك المنطقي وفهمك للغة مباشرة. ستبدأ في رؤية إمكانيات غير واضحة لدوال array_* وتتعلم كتابة كود فعال ونظيف.
ما الذي يجب دراسته قبل البدء
\n\nقبل الغوص في بحر المشاكل، تأكد من امتلاكك للأساسيات. إليك قائمة بالمواضيع الأكثر شيوعًا في مشاكل LeetCode لـ PHP:
\n\n1. المصفوفات وجداول التجزئة
\nهذا هو الأساس. يمكن حل 90% من المشاكل بالتلاعب الماهر بالمصفوفات. في PHP، المصفوفات هي قائمة وقاموس في آن واحد. هذا يمنحك قوة خارقة: يمكنك استخدام array_key_exists للتحقق من وجود عنصر في O(1).
ما يجب دراسته:
\n- \n
array_count_values— حساب تكرار العناصر. \n array_flip— تبديل المفاتيح والقيم (مفيد للبحث عن المكررات). \n array_unique،array_diff،array_intersect. \n - التكرار مع الحفاظ على الفهرس:
foreach ($arr as $key => $value). \n
2. النصوص
\nتاريخيًا، PHP قوية في التعامل مع النصوص. دوال str_split، substr، strpos و str_replace هي أفضل أصدقائك. لمشاكل المتناظرات (palindromes) والجناس (anagrams) أو حساب الأحرف، لا غنى عنها.
نصيحة: استخدم strlen() لطول النص و mb_strlen() للنصوص متعددة البايت (Unicode).
3. القوائم المرتبطة والأشجار
\nهنا، PHP أضعف قليلاً من Java/C++ لعدم وجود كلاسيات مدمجة للعُقد. لكن إنشاء كلاسياتك الخاصة سهل ومفيد. ستفهم كيفية عمل المراجع والتكرار.
\nالنمط:
\nclass ListNode {\n public $val;\n public $next;\n public function __construct($val = 0, $next = null) {\n $this->val = $val;\n $this->next = $next;\n }\n}\n\n4. المكدس والطابور
\nلا يوجد كلاس Stack منفصل في PHP، لكن المصفوفة تؤدي الغرض: array_push() / array_pop() للمكدس، array_shift() / array_push() للطابور. لمشاكل التحقق من صحة الأقواس أو BFS، هذا كافٍ.
5. الترتيب والبحث
\nالدالة المدمجة sort() تستخدم الترتيب السريع وتعمل بسرعة كبيرة. للشروط المخصصة، استخدم usort() مع دالة رد نداء. معرفة البحث الثنائي (يدويًا أو عبر array_search) ضرورية.