Leetcode : Longest Palindromic Substring

Longest Palindromic Substring Nov 11 '11

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.


思路:

题目的意思是从一个字符串中找出最长的“回文”!回文就是将自身颠倒过来之后与自身相等,如ABBA,颠倒之后就变成了ABBA,跟之前相同,所以“ABBA”是回文。

看到题目之后我第一感觉就是用“递归”,在一阵狂敲键盘之后,修改了几处小问题之后就编译和测试通过了,但测试仅限于长度短字符串,在测试长字符串时,计算就超时了,这时候我才意识到之前的算法复杂度实在是太高了。摒弃“递归”!

由于“回文”是轴对称的(初中数学应该就学过了),那么我把对称轴从第一个字符一直向后移,并计算出每一个对称轴对应的最大字符串,然后进行字符串长度比较,返回最大字符串。时间复杂度是O(n*n)。Bingo,长字符串测试通过!


代码如下:

class Solution
{
public:
	string longestPalindrome(string s)
	{
		if (s.length() < 2)
			return s;

		int len = s.length();
		string strLongest(s.begin(), s.begin() + 1);

		for (int i = 0; i < len - 1; ++i)
		{
			int left = i - 1;
			int right = i + 1;
			while(left >= 0 && right < len)
			{
				if (s[left] != s[right])
					break;
				--left, ++right;
			}
			if (right - left - 1 > strLongest.length())
				strLongest = s.substr(left+1, right - left - 1);

			left = i;
			right = i + 1;
			while (left >= 0 && right < len)
			{
				if (s[left] != s[right])
					break;
				--left, ++right;
			}
			if (right - left - 1 > strLongest.length())
				strLongest = s.substr(left+1, right - left - 1);
		}

		return strLongest;
	}
};



你可能感兴趣的:(Leetcode : Longest Palindromic Substring)