كيفية التحقق من رقم Palindrome في بايثون؟

نشرت: 2020-11-30

جدول المحتويات

ما هو Palindrome؟

المتناظرة هي كلمة أو رقم أو أي سلسلة من الأحرف التي تقرأ نفس الرجوع للخلف كما تقرأ للأمام.

أمثلة قليلة: تم فصله ، 1567651 ، 02/02/2020 ، المالايالامية

لذلك يوضح لك هذا المقال طرقًا مختلفة يمكنك من خلالها كتابة برنامج للتحقق مما إذا كان إدخال معين متماثلًا أم لا ، باستخدام Python.

طريقة 1:

الحل الأكثر سذاجة الذي يتبادر إلى الذهن هو عكس الرقم ومعرفة ما إذا كان يساوي رقم الإدخال. يمكن القيام بذلك على النحو التالي:

رقم = int (input ()) ؛

عكس = 0

بينما الرقم> 0:

رقم = عدد٪ 10

عكس = عكس * 10 + رقم

رقم = رقم // 10

إذا كان الرقم == عكس:

طباعة ("إنها متناظرة!")

آخر:

طباعة ("إنها ليست متناظرة!")

ومع ذلك ، فإن هذا يضعف قابلية قراءة الكود ولديه أسطر من التعليمات البرمجية أكثر مما هو مطلوب. تحقق من دورة علوم البيانات عبر الإنترنت لمعرفة المزيد.

إليك طريقة قصيرة ولطيفة للتحقق من رقم باستخدام سطر واحد فقط.

الطريقة الثانية:

الحيلة هي أن تأخذ رقم الإدخال كنوع بيانات str بدلاً من int. ثم يمكنك استخدام أسلوب التقطيع [:: - 1] للحصول على عكس السلسلة والتحقق من المساواة في عبارة if نفسها.

رقم = المدخلات ()

إذا كان الرقم == رقم [:: - 1]:

طباعة ("إنها متناظرة!")

آخر:

طباعة ("إنها ليست متناظرة!")

الطريقة الثالثة:

هذه طريقة تكرارية للتحقق مما إذا كانت المصفوفة متناظرة أم لا.

def isPalindrome (أرقام ، بداية ، نهاية):

إذا كانت البداية> = النهاية:

عودة صحيح

إذا كانت الأرقام [البداية] == الأرقام [النهاية]:

العودة isPalindrome (الأرقام ، البداية + 1 ، النهاية - 1)

آخر:

عودة خطأ

الأرقام = قائمة (خريطة (int ، input (). split ()))

ن = لين (أرقام)

إذا كان Palindrome (أرقام ، 0 ، ن -1):

طباعة ("إنها متناظرة!")

آخر:

طباعة ("إنها ليست متناظرة!")

تتحقق الدالة isPalindrome مما إذا كانت عناصر المصفوفة الأولى والأخيرة متطابقة أم لا . إذا لم يكن الأمر كذلك ، تقوم الوظيفة على الفور بإرجاع False. وإلا فإنه يتحقق بشكل متكرر من العناصر المتطرفة التالية حتى يلتقي المؤشران في المنتصف.

قراءة: مواضيع وأفكار مشروع بايثون

أسئلة المقابلة الترميز الشائعة المتعلقة بالتناظرات

# 1 أطول سلسلة فرعية متناظرة

بالنظر إلى سلسلة واحدة فقط كمدخل ، يجب عليك إرجاع طول أطول سلسلة فرعية متناظرة في السلسلة.

على سبيل المثال:

المدخلات: "acbcbabcc"

المخرجات: 5 ('cbabc')

نهج:

إذا حاولنا ربط هذا بواحدة من أكثر مشاكل DP شيوعًا ، وهي أطول سلسلة فرعية شائعة ، فإن الاختلاف هنا هو أننا حصلنا على سلسلة إدخال واحدة فقط بينما يستخدم LCS سلسلتين. نظرًا لأننا نعلم أن المتناظرة تساوي تمامًا عكسها ، يمكننا أن نجعل الوتر الثاني هو عكس المدخل المعطى.

الآن يصبح هذا تمامًا مثل إيجاد LCS.

def LCSubstr (A، B، m، n):

LCSub = [[0 لـ i في النطاق (n + 1)] لـ j في النطاق (m + 1)]

الجواب = 0

لأني في النطاق (م + 1):

لـ j في النطاق (n + 1):

إذا (i == 0 أو j == 0):

LCSub [i] [j] = 0

إليف أ [i-1] == ب [j-1]:

LCSub [i] [j] = 1 + LCSub [i-1] [j-1]

الجواب = max (ans، LCSub [i] [j])

آخر:

LCSub [i] [j] = 0

عودة الجواب

str1 = المدخلات ()

str2 = str1 [:: - 1]

م = لين (str1)

ن = لين (str2)

طباعة ('طول أطول سلسلة فرعية متناظرة ='، LCSubstring (str1، str2، m، n))

لذلك بالنسبة للإدخال أعلاه ، نحصل على السلسلتين كـ

"acbcbabcc" و

"ccbabcbca"

أطول سلسلة فرعية مشتركة تصبح "cbabc" وهي بطول 5.

# 2 تحقق مما إذا كان Anagram of a String هو Palindrome

بالنظر إلى سلسلة كمدخل ، يجب عليك التحقق مما إذا كان أي جناس مصغر للسلسلة يمكن أن يكون متماثلًا أم لا وإرجاع نعم / لا وفقًا لذلك.

على سبيل المثال:

المدخلات: "pythonpython"

الإخراج: نعم

(في حين أن السلسلة نفسها ليست متناظرة ، فإن الجناس الناقص المحتمل "pythonnohtyp" يشكل متماثلًا)

المدخلات: "harrypotter"

الإخراج: لا

نهج:

إذا لاحظت جيدًا ، كلما كان لدينا سلسلة متناظرة الطول متساوية ، يتم تكرار جميع الأحرف في النصف الأول في النصف الثاني. هذا يعني أن جميع الأحرف الموجودة في السلسلة تحدث عددًا زوجيًا من المرات.

عندما يكون الطول فرديًا ، فإن جميع الأحرف الموجودة على يسار العنصر الأوسط (غير شامل) تحدث نفس عدد المرات في الجانب الأيمن من العنصر الأوسط. هذا يعني أنه لا يوجد سوى حرف واحد يحدث عددًا فرديًا من المرات (العنصر الأوسط) وكل الأحرف الأخرى تحدث عددًا زوجيًا من المرات.

باستخدام هذا المنطق ، يمكننا تخزين عدد الأحرف في السلسلة في تجزئة والتحقق من هذه القيود للحصول على الإجابة المطلوبة.

CHAR_RANGE = 256

str1 = المدخلات ()

freq = [0 بالنسبة لي في النطاق (CHAR_RANGE)]

لأني في str1:

freq [ord (i)] + = 1 #ord (x) يعطي قيمة unicode لـ x

num_odds = 0

لأني في النطاق (CHAR_RANGE):

إذا التكرار [i] & 1:

عدد_الأعداد + = 1

إذا (عدد_العدد> 1):

طباعة ("نعم")

آخر:

طباعة ("لا")

خاتمة

في الختام ، فإن المشاكل المتناظرة شائعة جدًا ومثيرة للاهتمام. إنها مفيدة لحل الألغاز الرياضية المختلفة وأسئلة البرمجة التنافسية.

إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع برنامج IIIT-B & upGrad التنفيذي PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1 - في 1 مع موجهين في الصناعة ، أكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

ما هو الوقت المعقد لبرنامج Palindrome؟

غالبًا ما يتم استخدام عدد العمليات الأولية التي تقوم بها الطريقة لتقدير تعقيد الوقت ، على افتراض أن كل عملية أولية تستغرق وقتًا محددًا لإكمالها. التعقيد الزمني لتحديد ما إذا كان الرقم متماثل أم لا هو O (log10 (n)). عندما نتحقق من أن القيم متطابقة ، فإننا نقسم الرقم أو القيمة على عشرة في كل تكرار. نتيجة لذلك ، فإن التعقيد الزمني يساوي عدد الأرقام في رقم.

كيف يختلف / يختلف عن // عامل التشغيل في بايثون؟

عندما نستخدم عامل القسمة ، أي الشرطة المائلة المفردة (/) في بايثون ، يقسم المترجم القيمتين على الجانبين الأيمن والأيسر للشرطة المائلة. ولكن عندما نستخدم الشرطة المائلة المزدوجة (//) ، أي تقسيم الأرضية ، فإننا نطلب من المترجم تنفيذ عملية القسمة النموذجية ، ولكن النتيجة التي ينتج عنها هي أكبر عدد صحيح ممكن بالقرب من الإجابة. هذا العدد الصحيح إما أصغر من أو يساوي نتيجة القسمة العادية.

ما هو الراتب الأساسي لمطور لغة Python؟

من الحقائق المعروفة أن لغة Python تُستخدم على نطاق واسع في معظم الصناعات والشركات ، مما يجعل Python ثاني أعلى لغة حوسبة مدفوعة الأجر. تعد Python أيضًا لغة البرمجة المفضلة بين الطلاب والمهنيين لأنها سهلة التعلم ومرنة للغاية. يبلغ الراتب الأساسي لمطور Python في الهند حوالي 4،27،293 روبية هندية سنويًا في المتوسط. يمتلك المحترفون الذين يتعلمون Python نطاقًا كبيرًا حيث يتم استخدام Python أيضًا في مجالات أخرى مثل علوم البيانات والتعلم الآلي.