leetcode-最长回文串



给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 的最大长度为1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"


#include
#include
#include
using namespace std;
string longestPalindrome(string s);

int main()
{
	string s1,s2;
	cin >> s1;
	s2 = longestPalindrome(s1);
	cout << s2;

	system("pause");
	return 0;
}
string longestPalindrome(string s)
{
	int length = s.size();
	int substrLength;
	int prev;
	int next;
	int maxlen=0;
	string result;
	for (int i = 0; i < length; i++)
	{
		prev = i;
		next = i;
		while (true)
		{
			prev -= 1;
			next += 1;
			if (prev < 0 || next > s.size() - 1)
			{
				substrLength = (next - 1) - (prev + 1) + 1;
				if (substrLength > maxlen)
				{
					maxlen = substrLength;
					result.assign(s, prev + 1, maxlen);
				}
				break;
			}
			if (s[prev] != s[next])
			{
				substrLength = (next - 1) - (prev + 1) + 1;
				if (substrLength > maxlen)
				{
					maxlen = substrLength;
					result.assign(s, prev + 1, maxlen);
				}
				break;
			}

		}
	}

	//回文串为偶数时  
	for (int i = 0; i < s.size(); i++)
	{
		prev = i;
		next = i + 1;
		if (prev >= 0 && next <= s.size() - 1 && s[prev] == s[next])
		{
			while (true)
			{
				prev = prev - 1;
				next = next + 1;
				if (prev < 0 || next > s.size() - 1)
				{
					substrLength = (next - 1) - (prev + 1) + 1;
					if (substrLength > maxlen)
					{
						maxlen = substrLength;
						result.assign(s, prev + 1, maxlen);
					}
					break;
				}
				if (s[prev] != s[next])
				{
					substrLength = (next - 1) - (prev + 1) + 1;
					if (substrLength > maxlen)
					{
						maxlen = substrLength;
						result.assign(s, prev + 1, maxlen);
					}
					break;
				}
			}
		}
	}
	return result;
	
}



给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 的最大长度为1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

你可能感兴趣的:(机试题)