题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
思路:
采用中心扩散的思想 遍历该字符串
遍历某字母时,若两边相同则继续扩散 直至不同
在遍历的过程中保存最长的
需注意 核心可能是单字母 也可能是双字母
代码:
class Solution {
public String longestPalindrome(String s) {
if(s.length()==0)
return s;
int max=0;
String s1 = null;
int n=s.length();
int q = 0;
for(int i=0;i<n;i++)
{
int i1=i;
while(i1-1>=0&&s.charAt(i)==s.charAt(i1-1))
{
i1--;
}
int i2=i;
while(i2+1<n&&s.charAt(i)==s.charAt(i2+1))
{
i2++;
}
int j=i1-1;
int t=i2+1;
while(j>=0&&t<n&&s.charAt(j)==s.charAt(t))
{
j--;
t++;
}
if(t-j-1>max)
{
max=t-j-1;
if(t-1>j+1)
s1=s.substring(j+1,t);
else {
s1=s.charAt(t-1)+"";
}
q=i;
}
}
return s1;
}
}