最长回文子串
程序员文章站
2024-02-27 14:58:33
...
给定一个字符串
s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。
1. 暴力算法
由于回文串的长度可奇可偶,比如"aba"是奇数形式的回文,"abba"就是偶数形式的回文,两种形式的回文都要搜索,对于奇数形式的,我们就从遍历到的位置为中心,向两边进行扩散,对于偶数情况,我们就把当前位置和下一个位置当作偶数行回文的最中间两个字符,然后向两边进行搜索。
static int maxLen = 0; // 最长回文子串的长度
static int start = 0;
// 暴力搜索
void solve(int i, int j, String str)
{
while (i >= 0 && j < str.length() && (str.charAt(i)==str.charAt(j)))
{
i--;
j++;
}
if (maxLen <= j-i-1)
{
maxLen = j-i-1;
start = i+1;
}
}
// 求解字符串s中的最长回文子串
public String longestPalindrome(String s)
{
// 1.先对s进行判断
if (s == null || s.length() == 0)
return null;
if (s.length() < 2)
return s;
int n = s.length();
for (int i=0; i<n; i++)
{
solve(i, i, s); // 奇数回文串aba
solve(i, i+1, s); // 偶数回文串abba
}
return s.substring(start, start+maxLen);
}
上一篇: 字符串——字符串中数字子串的求和
下一篇: java数组排序示例分享