字符串中最长回文字串个数

字符串中最长回文字串个数

问题描述

输入一个字符串,输出这个字符串中所有子字符串中最长回文子串的长度。

示例

输入字符串“google”;

输出 4。

方法一

得到输入字符串的所有子字符串,然后判断是不是回文;

返回其中最长的长度;

时间复杂度○(n^3)。

代码

bool IsPlalindrome(char *be,char *ed) //判断是不是回文
{
    if(be == NULL || ed ==NULL)
        return false;
    while(be <= ed && *be==*ed){
        be++;
        ed--;
    }
    if(be > ed)
        return true;
    return false;
}

int LengthOfLongestPlalindrome(char *A,int m)
{
    if(A == NULL)
        return -1;
    int Length = 1;
    int LengthOfA = m;
    char *pFirst = A;

    while(pFirst < (A+LengthOfA-1) ){
        char *pLast = pFirst +1;
        while(pLast <= (A + LengthOfA +1)){
            if(IsPlalindrome(pFirst,pLast)){
                int NewLength = pLast - pFirst +1;
                NewLength > Length ? Length = NewLength :1;
            }
            pLast++;
        }
        pFirst++;
    }
    return Length;
}

方法二

遍历字符串中每个字符,在每一次循环时,判断这个字符是不是回文的中心字符;

因为回文有奇数和偶数的区别,所以可以分成两部分判断;

时间复杂度Ο(n^2)。

代码

int LengthOfLongestPlalindrome(char *A,int m)
{
    if(A == NULL)
        return -1;
    int Length = 1;
    int LengthOfA = m;
    char *pChar = A;

    while(*pChar != '\0'){
        char *pFirst = pChar - 1;
        char *pLast = pChar + 1;
        while(pFirst >= A && *pLast != '\0' && *pFirst == *pLast){
            pFirst--;
            pLast++;
        }
        int newLength = pLast - pFirst -1;
        newLength > Length ? Length = newLength : 1 ;

        pFirst = pChar;
        pLast = pChar +1;
        while(pFirst >= A && *pLast != '\0' && *pFirst == *pLast){
            pFirst--;
            pLast++;
        }
        newLength = pLast - pFirst -1;
        newLength > Length ? Length = newLength : 1 ;

        pChar++;
    }
    return Length;
}

更详细信息参考博文

by:狼儿乖乖

time:2015/1/16 18:51:05

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值