C++:最大回文字符串

方法一:

//最长回文子串  
#include <iostream>  
  
using namespace std;  
  
//*s为字符串,n为字符串的长度  
int LagPalindrome(char *str, int n)  
{  
    int count = 0;  
    int max = 0;//最长回文子串的长度  
    if (str == NULL || n<1)  
    {  
        return 0;  
    }  
    for (int i = 0; i < n; i++)  
    {         
        //子串为奇数时  
        for (int j = 0; (i-j)>=0&&(i+j)<n; j++)  
        {  
            if (str[i - j] != str[i + j])  
            {  
                break;  
            }  
            count = 2 * j + 1;  
        }  
        if (count > max)  
        {  
            max = count;  
        }  
        //子串为偶数时  
        for (int k = 0; (i - k)>=0 && (i + k + 1) < n; k++)  
        {  
            if (str[i - k] != str[i + k+1])  
            {  
                break;  
            }  
            count=2*k + 2;  
        }  
        if (count > max)  
        {  
            max =count ;  
        }  
    }  
      
    return max;  
}  
  
int main( )  
{  
    char str[] = "abccba";  
    int n = strlen(str);  
    int MaxLen;  
    MaxLen = LagPalindrome(str, n);  
      
    cout << "最长回文子串的长度是:"<<MaxLen<<endl;  
  
    return 0;  
}  



方法二:

#include<iostream>
using namespace std;
//字符串是否对称
bool isAym(char *cbegin, char *cend)
{
    if(cbegin == NULL || cend ==NULL || cbegin > cend)
    {
        return false;
    }
    while(cbegin<cend)
    {
        if(*cbegin!=*cend)
        {
            return false;
        }
        cbegin++;
        cend--;
    }
    return true;
}

int getMaxSym2(char * str)
{
    if(str == NULL)
        return 0;
    int maxlength = 0;
    char *ptag = str;
    while(*ptag !='\0')
    {
        //奇数子字符串
         char *left = ptag - 1;
        char *right = ptag + 1;
        int oddlenght = 1;
        while(left >= str && *right != '\0' && *left == *right)
        {
            left--;
            right++;
            oddlenght += 2;
        }
        if(oddlenght > maxlength)
        {
            maxlength = oddlenght;
        }
        //偶数子字符串
         left = ptag;
        right = ptag + 1;
        int evenlength = 0;
        while(left >= str && *right != '\0' && *left == *right)
        {
            left--;
            right++;
            evenlength += 2;
        }
        if(evenlength > maxlength)
        {
            maxlength = evenlength;
        }

        ptag++;
    }
    return maxlength;
}


原文链接:点击打开链接1       点击打开链接2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值