Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Subscribe to see which companies asked this question
這個題目是要求最長子迴文串
JavaScript代碼實現
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
//1.處理字符串
var l = s.length;
var ret = "$";
for(var i = 0; i < l; i++){
ret += "#" + s.substr(i, 1);
}
ret += "#";
var n = ret.length;
//2.找到每個str[i]對應的最長子迴文串,寫進數組p[i]
//迴文子串邊界
var mx = 0;
//迴文子串中心位置
var pi = 1;
//數組,ret[i]的最長迴文子串半徑
var p = new Array();
for(var i = 0; i < n; i++){
p[i] = 1;
}
for(var i = 1; i < n; i++){
//j是i關於pi的對稱點
var j = 2 * i -1;
if(mx>i)
{
p[i]=Math.min(mx-i,p[2*pi-i]);
}
else
{
p[i]=1;
}
while((ret[i - p[i]] == ret[i +p[i]]) && (i - p[i] >= 0) && (i + p[i] < n)){
p[i]++;
}
if(p[i] > mx - i)
{
mx = p[i] + i;
pi = i;
}
}
//返回最長迴文串
var max = 0;
var center = 0;
for(var i = 1; i < n; i++){
if(p[i] > max){
max = p[i];
center = i;
}
}
ret = ret.substr(center - max + 1, 2 * max -1);
ret = ret.split("#");
ret = ret.join("");
return ret;
};
注意substr方法的參數意義