回文串就是正着读和反着读都一样的字符串。
比如说字符串aba
和abba
都是回文串,因为它们对称,反过来还是和本身一样。反之,字符串abac
就不是回文串。
可以看到回文串的的长度可能是奇数,也可能是偶数,这就添加了回文串问题的难度,解决该类问题的核心是双指针。
寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串。
for 0 <= i < len(s):
找到以 s[i] 为中心的回文串
更新答案
但是呢,回文串的长度可能是奇数也可能是偶数,如果是abba
这种情况,没有一个中心字符,上面的算法就没辙了。所以我们可以修改一下:
for 0 <= i < len(s):
找到以 s[i] 为中心的回文串
找到以 s[i] 和 s[i+1] 为中心的回文串
更新答案
代码:
class Solution {
public String longestPalindrome(String s) {
String res=new String();
for(int i=0;i<s.length();i++){
String s1=palindrome(s,i,i);
String s2=palindrome(s,i,i+1);
res=res.length()>s1.length() ? res:s1;
res=res.length()>s2.length() ? res:s2;
}
return res;
}
String palindrome(String s,int l,int r){
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
l--;
r++;
}
return s.substring(l+1,r);
}
}
palindrome这个函数是用来返回从l,r开始向两边扩散的情况下可得到的回文串
而从主函数中可以通过输入i,i 还是 i,i+1 来应对奇数,偶数两种情况,非常巧妙。
原文:https://www.cnblogs.com/shiji-note/p/14502679.html