मान लीजिए हमारे पास एक स्ट्रिंग s है, जिसे हम किसी भी बिंदु पर ठीक एक बार रोटेट कर सकते हैं। हमें उस सबसे लंबे पैलिंड्रोमिक सबस्ट्रिंग की लंबाई ढूंढनी है जो इस ऑपरेशन से प्राप्त हो सकती है।
उदाहरण के लिए, यदि इनपुट s = "elklev" है, तो आउटपुट 5 होगा, क्योंकि हम "el" और "klev" के बीच रोटेट करके "levelk" प्राप्त कर सकते हैं। यहां सबसे लंबा पैलिंड्रोमिक सबस्ट्रिंग "level" है जिसकी लंबाई 5 है।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम स्ट्रिंग को दो बार जोड़कर सभी संभावित रोटेशन की जांच करेंगे:
- s2 := s को दो बार जोड़ें (s + s)
- max_len := 0
- x को 0 से s के आकार - 1 तक लूप चलाएं:
- y को 0 से s के आकार तक लूप चलाएं:
- temp := s2[x से x + y तक का सबस्ट्रिंग]
- यदि temp पैलिंड्रोम है और इसकी लंबाई max_len से अधिक है, तो max_len अपडेट करें
- y को 0 से s के आकार तक लूप चलाएं:
- max_len लौटाएं
पायथन कार्यान्वयन
class Solution:
def solve(self, s):
s2 = 2 * s
max_len = 0
for x in range(len(s)):
for y in range(len(s) + 1):
temp = s2[x : x + y]
if temp == temp[::-1] and len(temp) > max_len:
max_len = len(temp)
return max_len
ob = Solution()
s = "elklev"
print(ob.solve(s))इनपुट
"elklev"
आउटपुट
5