मेरे पास एक दृष्टिकोण है जो हैशिंग को here उत्तर के रूप में पोस्ट किया गया है।
आप वास्तव में केएमपी का भी उपयोग कर सकते हैं। आप उलट स्ट्रिंग के लिए prefix function गणना कर सकता है, और फिर बाएं से दाएं अपने प्रारंभिक स्ट्रिंग पुनरावृति:
KMP एक समारोह prefix[i] = longest prefix of the string that is a suffix of string[1..i]
हालांकि, हमें पता करने के लिए the longest suffix of our string that is a prefix of the reversed string
चाहते गणना करता है। क्यूं कर? अगर हमने:
15232 => reverse = 23251
फिर स्ट्रिंग उलट तार का एक उपसर्ग है कि सबसे लंबे समय तक प्रत्यय 232
है। यह एक पालिंड्रोम है, और यह आपको जो कुछ पूछ रहा है उसे ढूंढने देता है क्योंकि स्ट्रिंग का एक प्रत्यय उल्टा स्ट्रिंग के उपसर्ग को ओवरलैप करता है यदि दोनों palindromes हैं।
आप मामलों है:
prefix[i] = length - i => you can get a palindrome of
length 2*prefix[i] centered at i and i+1
prefix[i] = length - i + 1 => you can get a palindrome of
length 2*prefix[i] - 1 centered at i
prefix[i] < length - i => you can't have a palindrome, ignore this position
तो यह KMP एल्गोरिथ्म के उपसर्ग समारोह गणना करने के लिए पर्याप्त होता है।
नहीं करना चाहिए-स्ट्रिंग की "रिवर्स" स्ट्रिंग के प्रत्यय के रूप में ही बनाने के लिए करने के लिए? –
@ user1990169 हां। मैंने इसे संपादित किया है। – ankitG
क्वारा पर एक अच्छा जवाब है: http://www.quora.com/What-are- अलग- एल्गोरिदम-for-converting-a-string-into-a-palindrome-by-adding-characters-to-the ------------------------string-to-string- –