欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最长回文子串

程序员文章站 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);
	}