weirdo


私信TA

用户名:weirdo917

访问量:890

签 名:

等  级
排  名 2158
经  验 2351
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 山东大学
专  业

  自我简介:

TA的其他文章

解题思路:重点在于回文字符串的寻找以及回文字符串的分类


注意事项:直接看注释就好

参考代码:

#include<stdio.h>

#include<string.h>

int  PalindromeString(char *s)//写一个函数来得到每一轮的结果,返回一个integer 

{

int ret,ret1=0,ret2=0,i,cnt1,cnt2;//下面来分类讨论回文字符串 

if(strlen(s)==1) ret=1;//长度为1,不做解释 

else{

for(i=0;i<strlen(s);i++){

if(s[i]==s[i+1]){

cnt1=2;

int j=i-1,k=i+2;

while(j>=0&&k<strlen(s)&&s[j]==s[k]){//这里是ABBA,1221类型的,中间有两个字符相同

cnt1 +=2;//找到之后往两边遍历,用计数器cnt1记录长度 

j--;k++;

}

if(ret1<cnt1) ret1=cnt1;//因为可能涉及到两种长度比较的问题,所以用ret1存放每次的长度 

}if(s[i]==s[i+2]){

    cnt2=3;

    int j=i-1,k=i+3;

    while(j>=0&&k<strlen(s)&&s[j]==s[k]){//与上面方法类似,这里处理ABA,121类型的,中间只有一个字符相同 

cnt2 +=2;

j--;k++;

}

if(ret2<cnt2) ret2=cnt2;

}

}

ret=(ret1>ret2)?ret1:ret2;//比较两种类型的长度,把长的交给ret 

}

return ret;//将最终结果返回 

}

int main()

{

char a[200];

int code[200],i=0,cnt=0;//用一个int数组记录每一次输入的字符串中的密码截获结果 

while(scanf("%s",&a) !=EOF){//利用scanf的返回值来一直输入字符串 

code[i]=PalindromeString(a);//调用回文字符串函数得到每一轮的结果,并记录在数组中 

i++;cnt++;//这里的cnt来记录code数组的长度 

}

for(i=0;i<cnt;i++) printf("%d\n",code[i]);//分行输出结果 

return 0;

}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区