最长回文子串
一:题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
示例一:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例二:
输入:s = "cbbd"
输出:"bb"
示例三:
输入:s = "a"
输出:"a"
示例四:
输入:s = "ac"
输出:"a"
题目来源:最长回文子串
二:思路及代码
(一):中心扩散法
顺序遍历字符串中的每一个字符,每一个字符都可以视为一个中心,那么对于任意一个字符,执行以下操作
1、定义left和right两个指针初始都指向当前中心字符
2、先向左,判断左边的字符与中心字符是否相同,如果相同那么执行left–
3、在向右,判断右边的字符与中心字符是否相同,如果相同那么执行right++
4、最后判断left指向的字符与right指向的字符是否相同,如果相同,那么让left–,right++。
每一次得到子串都与上一次得到的子串的长度进行比较,若长度大于原来的子串,那么就进行替换。
(二):代码
public static String longestPalindrome(String s) {
String string = ""; //返回的结果
int left,right;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
left = right = i;
//向左
while (left>0){
if (s.charAt(left-1) == c){
left--;
}else {
break;
}
}
//向右
while (right<s.length()-1){
if (s.charAt(right+1)==c){
right++;
}else {
break;
}
}
//判断两边是否相同
while (left>=0&&right<s.length()){
if (s.charAt(left) == s.charAt(right)){
left--;
right++;
}else {
break;
}
}
String substring = s.substring(left + 1, right);
if (string.length()<substring.length()){
string = substring;
}
}
return string;
}
更多处理方法可见:最长回文序列