题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
思路:
我们寻找所有奇数长度和偶数长度的回文子串,并且记录目前为止遇到的最长的回文子串。
1.遍历字符串中的元素。
2.奇扩展:确定一个中心元素。由中心元素向两边扩展;
扩展的条件是中心元素的两边均具有元素,并且两边的元素相同。扩展 的同时记录最长回文子串的长度。
3.偶扩展:确定两个中心元素。
public String longestPalindrome(String s)
{
//用于求字符串
int max_len=1;
int start=0;//用于表示最长回文字符串的长度
int l,r;
for (int i = 1; i < s.length(); i++) {
l=i-1;
r=i;
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r))
{
if(r-l+1>max_len)
{
start=l;
max_len=(r-l+1);
}
l--;
r++;
}
l=i-1;
r=i+1;
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r))
{
if(r-l+1>max_len)
{
start=l;
max_len=(r-l+1);
}
l--;
r++;
}
}
String lps=s.substring(start,start+max_len);
return lps;
}