मान लीजिए हमारे पास एक स्ट्रिंग s है। इस स्ट्रिंग में लोअरकेस वर्ण, अन्य विशेष वर्ण और संख्याएं हो सकती हैं। हमें जांचना है कि स्ट्रिंग में मौजूद केवल अक्षर पालिंड्रोमिक हैं या नहीं। यहां एक प्रतिबंध है कि हमें इस समस्या को हल करने के लिए अतिरिक्त स्थान का उपयोग करने की अनुमति नहीं है।
उदाहरण के लिए, यदि s = "ra$5ce58car" है, तो आउटपुट True होगा, क्योंकि अक्षर "racecar" बनाते हैं जो पालिंड्रोम है।
हल करने का तरीका
- दो हेल्पर फ़ंक्शन परिभाषित करें: first_letter_index() और last_letter_index() जो बाएं और दाएं से पहला अक्षर ढूंढते हैं
- left := 0, right := स्ट्रिंग की लंबाई - 1
- flag := True
- लूप में:
- left को बाएं से पहला अक्षर पर सेट करें
- right को दाएं से पहला अक्षर पर सेट करें
- यदि right < 0 या left < 0, तो लूप तोड़ें
- यदि str[left] == str[right], तो left बढ़ाएं, right घटाएं, जारी रखें
- अन्यथा flag := False, लूप तोड़ें
- flag लौटाएं
उदाहरण कोड
def first_letter_index(str, left, right):
index = -1
for i in range(left, right + 1):
if 'a' <= str[i] <= 'z':
index = i
break
return index
def last_letter_index(str, left, right):
index = -1
for i in range(left, right - 1, -1):
if 'a' <= str[i] <= 'z':
index = i
break
return index
def solve(str):
left = 0
right = len(str) - 1
flag = True
for i in range(len(str)):
left = first_letter_index(str, left, right)
right = last_letter_index(str, right, left)
if right < 0 or left < 0:
break
if str[left] == str[right]:
left += 1
right -= 1
continue
flag = False
break
return flag
s = "ra$5ce58car"
print(solve(s))
इनपुट
"ra$5ce58car"
आउटपुट
True