5. 最长回文子串
java力扣LeetCode
给你一个字符串 s,找到 s 中最长的回文子串。
方法一 暴力求解
class Solution {
public String longestPalindrome(String s) {
String res = null ;
int m=0;
int flag=0;
for(int i = 0;i<s.length(); i++)
{
for(int j =s.length()-1; j>i;j--)
{
if(s.charAt(i)==s.charAt(j))
{
int a=i;
int b=j;
int k;
int temp=0;
flag=0;
for( k =a; k<=b;k++)
{
System.out.print(k);
if(s.charAt(k)!=s.charAt(b-temp))
{
flag=1;
break;
}
temp++;
}
if(flag==0)
{
if((b-a)>m)
{
m=b-a;
res=s.substring(a,b+1);
}
}
}
}
}
if(m==0)
{
return s.substring(0,1);
}
return res;
}
}
方法二
扩展法,遍历一遍,选取其中一位进行左右扩展,分为奇偶两种情况
class Solution {
public String longestPalindrome(String s) {
String res =null;
int m=0;
int right,left;
for(int i=0;i<s.length();i++)
{
//奇
for(right=i-1,left=i+1;right>=0&&right<s.length()&&left>=0&&left<s.length();right--,left++)
{
if(s.charAt(right)!=s.charAt(left))
{
break;
}
if(left-right>m)
{
m=left-right;
res=s.substring(right,left+1);
}
}
//偶
for(right=i,left=i+1;right>=0&&right<s.length()&&left>=0&&left<s.length();right--,left++)
{
if(s.charAt(right)!=s.charAt(left))
{
break;
}
if(left-right>m)
{
m=left-right;
res=s.substring(right,left+1);
}
}
}
if(m==0)
{
return s.substring(0,1);
}
return res;
}
}