计算其中最长回文子串的长度

计算其中最长回文子串的长度

题目来自网络搜集和常考算法,如有侵权请联系我

题目描述

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。

给定字符串A以及它的长度n,请返回最长回文子串的长度。

测试样例:

"abc1234321ab",12
返回:7

C++

class Palindrome {
public:
    int getLongestPalindrome(string A, int n) {
        // write code here
        int right = 0;
        int left = 0;
        int maxLen = 0;
        for(int i=0;i<n;i++){
            right = i;
            left = i;
            while(left>=0&&right<n&&A[right]==A[left]){
                ++right;
                --left;
            }
            maxLen = max(maxLen,right-left-1);
            
            
            left = i;
            right = i+1;
            while(left>=0&&right<n&&A[right]==A[left]){
                ++right;
                --left;
            }
            maxLen = max(maxLen,right-left-1);
        }
        
        return maxLen;
        
    }
};

C语言

    char* longestPalindrome(char* s)
   {
   	int len = strlen(s);
   	if (len <= 1) { return s; }
   	//定义bool类型的dp,只能为true或false
   	bool dp[1001][1001];
   	memset(dp, 0, sizeof(dp));
   	dp[0][0] = 1;
   	for (int i = 1; i < len; i++)
   	{
   		dp[i][i] = true;
   		//一定不要忽略,在下面k=2会用到
   		dp[i][i - 1] = true;
   	}
   	int left = 0;
   	int right = 0;
   	int max = 0;
   	//k表示回文子串的长度
   	for (int k = 2; k <= len; k++)
   	{
   		//i表示回文子串的起始位置
   		for (int i = 0; i < len - k + 1; i++)
   		{
   			if (s[i] == s[k - 1 + i] && dp[i + 1][k + i - 2])
   			{
   				dp[i][k - 1 + i] = true;
   				if (max < k - 1)
   				{
   					max = k - 1;
   					left = i;
   					right = k - 1 + i;
   				}
   			}
   		}
   	}
   
   	char *arr = (char *)malloc(sizeof(int) * (max * 2));
   	int i = 0;
   	for (; i <= max; i++)
   	{
   		arr[i] = s[left++];
   	}
   	arr[i] = '';
   	return arr;
   }

原文地址:https://www.cnblogs.com/cuianbing/p/13743815.html