给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 示例 3: 输入:s = "a" 输出:"a" 示例 4: 输入:s = "ac" 输出:"a" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public 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);
}
public String longestPalindrome(String s) {
String result="";
for(int i=0;i<s.length();i++){
String s1=palindrome(s,i,i);
String s2=palindrome(s,i,i+1);
if(result.length()<s1.length()){
result=s1;
}
if(result.length()<s2.length()){
result=s2;
}
}
return result;
}
}
Java字符串相关方法
public String substring(int beginIndex, int endIndex)包括起始索引不包括结束索引,即返回string[beginIndex..endIndex-1]
charAt(index) 根据下标找到对应位字符,默认为0,超出返回NaN
indexOf() 根据字符找下标,找不到就返回 -1
最长公共子串思路是错误的,比如说字符串 aacxycaa
,反转之后是 aacyxcaa
,最长公共子串是 aac
,但是最长回文子串应该是 aa
。
寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串