LeetCode 05 最长回文子串

思路:

  中心扩展法

以每个下标做为中心, 向两遍扩散

需要注意的是, 分为奇偶两种情况

奇数时, 当前元素为中心

偶数时,当前元素和下一个元素为中心

最后保存最长长度和起始坐标即可, 注意空字符串的情况

我曾经犯的错误对substr用法不对, 第一个参数是起始位置, 第二个参数是长度, 而不是终点位置

string longestPalindrome(string s) {
	int maxleng = 0;
	int maxleft = 0;
	string temp = "";
	string longeststr = "";
	for (int i = 0; i < s.size(); i++)
	{
		string ji = wangliangbianzhao(i, i, s);
		string ou = wangliangbianzhao(i, i+1, s);
		if (ou.size() > ji.size())
		{
			temp = ou;
		}
		else
		{
			temp = ji;
		}
		if (maxleng < temp.size())
		{
			longeststr = temp;
			maxleng = temp.size();
		}
	}
	return longeststr;
	
}
string wangliangbianzhao(int left, int righ, string s)
{
	if (s == "")
	{
		return 0;
	}
	int L = left;
	int R = righ;
	int lenth = 0;
	while (L >=0 && R < s.size())
	{
		if (s[L] == s[R])
		{
			L--;
			R++;
		}
		else
		{
			break;
		}
	}
	string res = s.substr(L+1,R-L-1);
	return res;
}

  

posted @ 2019-03-06 19:24  Derek丶D  阅读(146)  评论(0编辑  收藏  举报