LeetCode刻意练习17--最长的回文子串

在这里插入图片描述
题目:

给定一个字符串 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;
		
	}
发布了49 篇原创文章 · 获赞 2 · 访问量 877

猜你喜欢

转载自blog.csdn.net/qq_43720551/article/details/104929680