عدّ الحروف بجدول تكرارات
إحصاء المحارف باستخدام dict أو مصفوفة
عدّ الحروف بجدول تكرارات درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
لماذا نعدّ المحارف
تختزل مسائل كثيرة من مسائل السلاسل النصية في سؤال واحد: كم مرة يظهر كل محرف؟ يجيب جدول التكرارات عن ذلك في مرور واحد. 📊
طريقة القاموس
يربط dict عادي كل محرف بعدد مرات ظهوره. وهو مناسب لأي أبجدية، بما في ذلك Unicode والرموز.
freq = {}
for ch in 'apple':
freq[ch] = freq.get(ch, 0) + 1
print(freq)تتجنب get() خطأ KeyError
يعيد استخدام get(ch, 0) القيمة 0 عند غياب المفتاح، لذلك يبدأ ظهور الحرف الأول بالعد من واحد بسلاسة.
يتولى Counter المهمة
ينشئ الصنف Counter من collections الجدول كاملًا في سطر واحد. وهو المفضل في المسابقات بفضل سرعته ووضوحه.
from collections import Counter
freq = Counter('apple')
print(freq['p']) # 2المفاتيح المفقودة تعيد صفرًا
لا يرفع Counter خطأ عند غياب المفتاح. فإذا طلبت محرفًا لم تره من قبل، فسيعيد 0 فقط، مما يبقي شيفرتك بلا تفرعات.
from collections import Counter
c = Counter('abc')
print(c['z']) # 0طريقة المصفوفة الثابتة
بالنسبة إلى الأحرف الصغيرة فقط، تكون قائمة من 26 خانة أسرع حتى. افهرس كل حرف بحسابات ord وزِد العداد.
cnt = [0] * 26
for ch in 'apple':
cnt[ord(ch) - ord('a')] += 1المفاضلة بين المصفوفة والقاموس
تكون المصفوفة الأسرع، لكنها لا تناسب إلا أبجدية صغيرة معروفة. أما dict أو Counter فيتعاملان مع أي محارف بتكلفة بسيطة.
العثور على الأكثر تكرارًا
يوفر Counter الدالة most_common(k) التي تعيد أفضل k محارف مرتبة مسبقًا حسب التكرار. ولا حاجة إلى فرز يدوي.
from collections import Counter
print(Counter('mississippi').most_common(1))مقارنة جدولين
تكون سلسلتان متناظرتين تمامًا عندما يتطابق جدول تكراراتهما. ومقارنة كائنَي Counter تكفي في سطر واحد.
from collections import Counter
print(Counter('listen') == Counter('silent')) # Trueيكفي مرور واحد
يستغرق بناء الجدول O(n)، أي مسحًا واحدًا للسلسلة. بعد ذلك يستغرق كل بحث زمنًا ثابتًا.
اطرح للعثور على الفائض
يدعم Counter الطرح، لذا يمكنك تحديد المحارف الموجودة في إحدى السلسلتين وغير الموجودة في الأخرى. وهذا مفيد جدًا في مسائل نمط ملاحظة الفدية.
from collections import Counter
print(Counter('aabb') - Counter('ab'))تحقق سريع
سؤال واحد حول عدّ المحارف.
مراجعة
يمكنك الآن عدّ المحارف باستخدام dict أو Counter أو مصفوفة من 26 خانة، واستخدام هذه الجداول لاختبار التناظرات والعثور على الأحرف كثيرة التكرار. 🎉
الأسئلة الشائعة
هل درس «عدّ الحروف بجدول تكرارات» مجاني؟
نعم — نص درس «عدّ الحروف بجدول تكرارات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «عدّ الحروف بجدول تكرارات»؟
إحصاء المحارف باستخدام dict أو مصفوفة تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «عدّ الحروف بجدول تكرارات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حيل المحارف وord وchr
- عدّ الحروف بجدول تكرارات
- التحقق من التناظر الانعكاسي بالطريقة الصحيحة
- تقسيم الكلمات وتجريدها وإعادة وصلها