给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:输入:s = "cbbd"
输出:"bb"
示例 3:输入:s = "a"
输出:"a"
示例 4:输入:s = "ac"
输出:"a"
1解题思路:
从头遍历,向两边三开找两边相同的字符串,那就是常规的解法。为了方便,所以我用了StringBuffer,来尽可能小得占用内存。上代码:
class Solution {
public String longestPalindrome(String s) {
String fin=new String();
for(int i=0;i<s.length();i++){
StringBuffer temp=new StringBuffer();
if(i!=s.length()-1&&s.charAt(i)==s.charAt(i+1)) {//对于双数的字符
temp.append(s.charAt(i));
temp.append(s.charAt(i + 1));
for (int j = 1; j < s.length() / 2 + 1; j++) {
if (i - j < 0 || i + 1 + j >= s.length())
break;
if (s.charAt(i - j) == s.charAt(i + j + 1)) {
temp.insert(0, s.charAt(i - j));
temp.append(s.charAt(i + j + 1));
} else break;
}
if (fin.length() < temp.length()) {
fin=temp.toString();
}
}
if(temp.length()!=0)
temp.delete(0,temp.length());
temp.append(s.charAt(i));
for(int j=1;j<s.length()/2+1;j++){
if(i-j<0 || i+j>=s.length())
break;
if(s.charAt(i-j)==s.charAt(i+j)){
temp.insert(0,s.charAt(i-j));
temp.append(s.charAt(i+j));
}else break;
}
if(fin.length()<temp.length())
fin=temp.toString();
}
return fin.toString();
}
}
代码都在https://github.com/Jinweiwei1997/lEETCODES