思路:遍历字符串,对于字符串的每个字符,维持两个游标(left
,right
),找到游标对应字符相等时就同速度向两边扩散。
对于 奇数长度子串,left
= right
对于偶数成都子串,left
= right
- 1
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
let res = '';
for(let i = 0; i< s.length; i++){
// 奇数
let left = i, right = i;
while(left >= 0 && right < s.length && s[left]==s[right]) {
left--;
right++;
}
if(res.length < right - left -1){
res = s.substring(left + 1, right);
}
// 偶数
left = i, right = i+1;
while(left >= 0 && right < s.length && s[left]==s[right]) {
left--;
right++;
}
if(res.length < right - left -1){
res = s.substring(left + 1, right);
}
}
return res;
};
为了看起来更方便可以简单的封装一下
var longestPalindrome = function(s) {
let res = '';
for(let i = 0; i< s.length; i++){
find(i, i);
find(i, i+1);
}
function find(left, right){
while(left >= 0 && right < s.length && s[left]==s[right]) {
left--;
right++;
}
if(res.length < right - left -1){
res = s.substring(left + 1, right);
}
}
return res;
};
不过性能有些损耗