给定一个字符串
s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
1、暴力法
对于每一个子串,判断是否是回文字符串,找出长度最大者即可。
public String longestPalindrome(String s)
{
// 先对s进行判断
if (s == null || s.length() == 0)
return "";
if (s.length() == 1)
return s;
int n = s.length();
String subStr = null;
int MaxLen = 0;
String longestPalindStr = null;
for (int i=0; i<n; i++)
{
for (int j=i+1; j<n; j++)
{
subStr = s.substring(i, j+1);
if (isPalindStr(subStr) && (j-i+1) > MaxLen)
{
MaxLen = j-i+1; // 更新最长回文串长度
longestPalindStr = subStr;
}
}
}
// 表示不存在长度为2及以上的回文字符串
if (longestPalindStr == null)
{
longestPalindStr = s.substring(0, 1);
}
return longestPalindStr;
}
// 判断是否是回文字符串
boolean isPalindStr(String s)
{
for (int i=0; i<s.length()/2; i++)
{
if (s.charAt(i) != s.charAt(s.length()-i-1))
{
return false;
}
}
return true;
}
2、动态规划