解题思路:重点在于回文字符串的寻找以及回文字符串的分类
注意事项:直接看注释就好
参考代码:
#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 人评分
简单的a+b (C语言代码)浏览:759 |
本人酷爱递归实现很多问题,这里也是浏览:549 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:819 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:466 |
简单的a+b (C语言代码)浏览:478 |
罗列完美数 (C语言代码)浏览:491 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2156 |
C二级辅导-等差数列 (C语言代码)浏览:694 |
一元一次方程 (C语言代码)浏览:4059 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:756 |