पालिंड्रोम क्या है?
एक पालिंड्रोम एक स्ट्रिंग है जो बाएं से दाएं पढ़ने पर या दाएं से बाएं पढ़ने पर समान होती है। दूसरे शब्दों में, एक पालिंड्रोम स्ट्रिंग वह है जिसका रिवर्स मूल स्ट्रिंग के बराबर होता है।
उदाहरण के लिए, civic, madam पालिंड्रोम हैं।
Cat पालिंड्रोम नहीं है। चूंकि इसका रिवर्स tac है, जो मूल स्ट्रिंग (cat) के बराबर नहीं है।
एक प्रोग्राम लिखें कि इनपुट स्ट्रिंग पालिंड्रोम है या नहीं।
मेथड 1 - स्ट्रिंग का रिवर्स ढूंढें
प्रोग्राम में आवश्यक मुख्य चीज़ स्ट्रिंग का रिवर्स ढूंढना है।
रिवर्स स्ट्रिंग को रिवर्स करने के किसी भी मेथड का उपयोग करके पाया जा सकता है। हम सिंपल स्लाइसिंग मेथड का उपयोग करके स्ट्रिंग को रिवर्स करेंगे। इनबिल्ट ''.join(reversed()) का भी उपयोग किया जा सकता है। हालांकि स्ट्रिंग को रिवर्स करने के अन्य तरीके हैं, हम एक सरल तरीके से जाएंगे।
रिवर्स की गई स्ट्रिंग की तुलना मूल स्ट्रिंग से करें।
यदि दोनों स्ट्रिंग्स समान हैं तो True वापस करें, अन्यथा False वापस करें।
उदाहरण
def isPalindrome(s):
rev = s[::-1]
if rev == s:
return True
return False
print("Enter a string")
st = input()
print(isPalindrome(st))
आउटपुट
Enter a string
madam
True
मेथड 2 - स्ट्रिंग का रिवर्स ढूंढे बिना
विचार यह है कि स्ट्रिंग के पहले और अंतिम इंडेक्स पर कैरेक्टर्स की लगातार तुलना करें जब तक वे असमान न हों।
हम स्ट्रिंग को रिवर्स किए बिना दो उदाहरण देखेंगे -
स्ट्रिंग वैल्यू "madam":
हम पहले और अंतिम कैरेक्टर्स की तुलना करते हैं जो समान हैं, आगे हम दूसरे और अंतिम से दूसरे कैरेक्टर्स की तुलना करते हैं जो फिर से समान हैं। अंत में हम केवल एक कैरेक्टर के साथ बचे हैं। इस प्रकार, स्ट्रिंग एक पालिंड्रोम है।
स्ट्रिंग वैल्यू "reader":
कैरेक्टर्स दूसरे और अंतिम से दूसरे एलिमेंट की तुलना तक समान हैं।
जब तीसरे और अंतिम से तीसरे कैरेक्टर्स की तुलना की जाती है, तो वे समान नहीं होते, इसलिए यह पालिंड्रोम नहीं है।
हम इस विचार को रिकर्सन या दो पॉइंटर्स का उपयोग करके इम्प्लीमेंट कर सकते हैं। हम दो पॉइंटर्स का उपयोग करके इम्प्लीमेंट करेंगे। हम स्टार्ट पॉइंटर को 0 और एंड पॉइंटर को अंतिम इंडेक्स पर शुरू करते हैं। हम तुलना शुरू करते हैं और यदि कैरेक्टर्स समान हैं, तो हम स्टार्ट पॉइंटर को इंक्रीमेंट करते हैं और एंड पॉइंटर को डिक्रीमेंट करते हैं (इस प्रकार उन्हें दूसरे और अंतिम से दूसरे कैरेक्टर पर लाते हैं और इसी तरह)।
हम कब False वापस करते हैं? यदि हम पाते हैं कि पॉइंटर्स के किसी भी सेट के लिए कैरेक्टर्स समान नहीं हैं, तो हमें आगे के इंडेक्स देखने की आवश्यकता नहीं है और हम False वापस कर सकते हैं।
हम कब True वापस करते हैं? अन्य मामले में, यदि स्ट्रिंग पालिंड्रोम है, तो हम True वापस करेंगे जब दोनों पॉइंटर्स समान हो जाएं (जांच के लिए केवल 1 कैरेक्टर बचा हो) या स्टार्ट पॉइंटर एंड पॉइंटर से अधिक हो जाए (सभी कैरेक्टर्स चेक हो गए हों) और इसलिए True वापस करें।
उदाहरण
def isPalindrome(s):
rev = s[::-1]
if rev == s:
return True
return False
print("Enter a string")
st = input()
print(isPalindrome(st))
आउटपुट
Enter a string
reader
False
>>>
Enter a string
madam
True