मान लीजिए कि हमारे पास एक स्ट्रिंग s है, तो हमें इसे पैलिंड्रोम बनाने के लिए s के बाद डाले जाने वाले वर्णों की न्यूनतम संख्या ज्ञात करनी होगी।
इसलिए, यदि इनपुट s ="mad" जैसा है, तो आउटपुट 2 होगा, क्योंकि हम इसे "मैडम" बनाने के लिए "am" जोड़ सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ख:=256, मी:=10^9 + 7
-
s :=s में प्रत्येक i के लिए (i का ASCII) - 97 का अंतर लेकर एक सूची
-
r:=s का अंतिम तत्व, l:=s का अंतिम तत्व
-
n :=s का आकार
-
रेस :=n - 1
-
पी:=बी
-
n − 2 से 0 की श्रेणी में i के लिए, 1 से घटाएं
-
r :=r + s[i] * p, r :=r mod m
-
एल:=एल * बी, एल:=एल + एस[i]
-
एल :=एल मॉड एम
-
पी:=पी * बी, पी:=पी मॉड एम
-
अगर l, r के समान है, तो
-
रेस:=मैं
-
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, s): b = 256 m = 10 ** 9 + 7 s = list(ord(i) − 97 for i in s) r = l = s[−1] n = len(s) res = n − 1 p = b for i in range(n − 2, −1, −1): r += s[i] * p r %= m l *= b l += s[i] l %= m p *= b p %= m if l == r: res = i return res ob = Solution() s = "mad" print(ob.solve(s))
इनपुट
"mad"
आउटपुट
2