思路:遍历字符串,对于字符串的每个字符,维持两个游标(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;};
不过性能有些损耗