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


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

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

    题目描述

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

    给定字符串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;
       }
    
    
  • 相关阅读:
    百马百担
    穷举
    折叠次数
    判断年份是否是闰年
    定义xy比大小
    1月21日
    1月20日作业-第三题
    1月20日作业-第二题
    1月18日
    1月18日
  • 原文地址:https://www.cnblogs.com/cuianbing/p/13743815.html
Copyright © 2020-2023  润新知