मैंने स्ट्रिंग में सबसे लंबा पैलिंड्रोम खोजने के लिए निम्न फ़ंक्शन लिखा था। यह ठीक काम करता है लेकिन यह "दोपहर" या "रेडर" जैसे शब्दों के लिए काम नहीं करेगा। मैं आसपास fiddled और से for
पाश में पहली पंक्ति बदल दिया है:स्ट्रिंग में सबसे लंबा पैलिंड्रोम
var oddPal = centeredPalindrome(i, i);
var oddPal = centeredPalindrome(i-1, i);
करने के लिए और अब यह काम करता है, लेकिन मैं क्यों पर स्पष्ट नहीं कर रहा हूँ। मेरा अंतर्ज्ञान यह है कि यदि आप एक विषम-लंबाई वाले पैलिंड्रोम की जांच कर रहे हैं तो शुरुआत में एक अतिरिक्त चरित्र होगा (मैंने इसे व्हाइटबोर्ड किया था और यह निष्कर्ष है कि मैं आया हूं)। क्या मैं अपने तर्क के साथ सही रास्ते पर हूं?
var longestPalindrome = function(string) {
var length = string.length;
var result = "";
var centeredPalindrome = function(left, right) {
while (left >= 0 && right < length && string[left] === string[right]) {
//expand in each direction.
left--;
right++;
}
return string.slice(left + 1, right);
};
for (var i = 0; i < length - 1; i++) {
var oddPal = centeredPalindrome(i, i);
var evenPal = centeredPalindrome(i, i);
if (oddPal.length > result.length)
result = oddPal;
if (evenPal.length > result.length)
result = evenPal;
}
return "the palindrome is: " + result + " and its length is: " + result.length;
};
अद्यतन: पॉल भयानक answer के बाद, मुझे लगता है कि यह समझ में आता है स्पष्टता के लिए दोनों चर बदलने के लिए:
var oddPal = centeredPalindrome(i-1, i + 1);
var evenPal = centeredPalindrome(i, i+1);
हाँ - अंत में यह समझ में आता है। निश्चित रूप से आप EVEN palindromes के लिए i + 1 करेंगे क्योंकि उनके "केंद्र" बाधाओं के लिए 1 के बजाय 2 होंगे। धन्यवाद! – devdropper87
मुझे लगता है कि यह अधिक सहज हो सकता है, ऊपर भी संपादन: var oddPal = centeredPalindrome (i-1, i + 1); var evenPal = centeredPalindrome (i, i + 1); – devdropper87
मैं बस यह इंगित करना चाहता था कि इस समस्या के लिए एक तेज़ रैखिक समय एल्गोरिदम है ['मनचेर का एल्गोरिदम'] (https://en.wikipedia.org/wiki/Longest_palindromic_substring) के रूप में। – Blastfurnace