[动态规划]最长回文子串

问题描述:

求一个字符串的最长回文子串,返回这个子串。

这个题目适合用动态规划的方式求解:

代码实现:

string longestPalindrome(string s) 
{
	int size = s.size();
	int dp[1000][1000] = {0};
	int left = 0;
	int right = 0;
	int len = 0;
	
	for(int j = 0; j < size; ++j)
	{
		for(int i = 0; i < j; ++i)
		{
			if(j - i < 2)
			{
				dp[i][j] = (s[i] == s[j]);
			}
			else
			{
				dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1];
			}
			
			if(dp[i][j] && len < j - i + 1)
			{
				len = j - i + 1;
				left = i;
				right = j;
			}
		}//for
		
		dp[j][j] = 1;
	}//for
	
	return s.substr(left, right - left + 1);
}

  

posted @ 2015-09-15 12:36  stemon  阅读(387)  评论(0编辑  收藏  举报