笔试精选1 回文字符串长度

笔试精选1 计算回文字符串长度

题目描述

​ 回文子串是指字符串的一个子串,这个子串从左往右和从右往左均一样,例如ABBAABCBA

​ 对于一个由大写英文字母*组成的字符串,求它的最长回文子串的长度,其中一个*可以用来替代任意一个字符

举例说明

​ 字符串AB*B*AC的最长回文子串的长度为6,当第1个*B,第2个*也为B时,可以得到一个回文子串ABBBBA

要求

​ 输入一个包含大写英文字母和至少一个*的字符串,请输出最长回文子串的长度。

输入描述

 单组输入
 输入1行,包含一个由若干大写英文字母和至少一个"*"号组成的字符串,其长度小于等于1000。

输出描述

 输出一个正整数,表示可以得到的最长回文子串的长度。

样例输入

 DAB*B*ACD

样例输出

 6

C源码

#include<stdio.h>
#include<string.h>
int main(){
    char *ch;																				
    int ll;
    scanf("%s",ch);                                //接受输入的字符串ch
    int len=strlen(ch);														 //得到字符串长度len
    for(int i=0;i<len-1;i++){                      //从第一个字符开始找
        for(int j=len-1;j>i;j--){                  //从后往前找,才能得到最长回文字符串
            int m=i;                               //用m代替i
            int n=j;                               //用n代替j
            ll=0;                                  //ll即为最长回文字符串长度
            while(ch[m]==ch[n] || ch[n]=='*'){     //判断第i个字符和第j个字符是否相等或第j个字符是否为‘*’
                m=m+1;                             //符合while条件后,取靠向内的字符
                n=n-1;                             //符合while条件后,取靠向内的字符
                ll++;                              //符合while条件后,回文字符串长度加1
                if(m!=n)ll++;                      //判断第m和n个字符是否为同一个,若是,则长度不需加1;若不是,则再加1
                if(m>n)break;                      //若m大于n,则说明已找到回文字符串
            }
            if(m<n)ll=0;                           //若到这步时m<n,则说明前面的while在没遍历完就FALSE了
            if(ll!=0)break;                        //若长度ll=0,则说明未找到回文字符串,需进入循环接着找
        }
        if(ll!=0)break;                            //若长度ll=0,则说明未找到回文字符串,需进入循环接着找
    }
    if(ll!=0){
        printf("%d",ll);                           //输出长度ll
    }
    else{
        printf("There has none!");
    }
    return 0;                                      //结束
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值