最长回文串
来源:互联网 发布:中企动力域名到期 编辑:程序博客网 时间:2024/05/17 05:13
最长回文串
- 使用fgetc(fin)可以从打开的文件fin中读取一个字符。一般情况下应当在检查它是不是EOF后再将其转换为char值。
- 从标准输入读取一个字符可以用getchar(),它等价于fgetc(stin)。
- fgets(buf,MAXN,fin)将读取完整的一行放在字符数组buf中。
- 头文件ctype.h中定义的isalpha、isdigit、isprint等可以用来判断字符的性质,而toupper、tolower等工具可以用来转换大小写。
别人家的内容
重点在于:枚举回文串“中间”的位置i;然后不断的往外扩展,直到有字符不同。
- 奇数:aba(i-j,i+j)
- 偶数:abba(i-j,i+j+1)
code:
#include<stdio.h>#include<string.h>#include<ctype.h>const int MAXN=5010;char buf[MAXN],s[MAXN];int p[MAXN];int main(){ int n,m=0,max=0,x,y; int i,j; fgets(buf,sizeof(s),stdin);//输入字符串 n=strlen(buf); //p[m]保存s[i]在buf中的位置,去掉标点符号,并全部转为大写。 for(i=0;i<n;i++){ if(isalpha(buf[i])) { p[m]=i; s[m++]=toupper(buf[i]); } }// for(i=0;i<m;i++){// for(j=0;j<m;j++){// int ok=1;// for(k=0;k<j;k++){// if(s[k]!=s[i+j-k]) ok=0;// if(ok&&j-i+1>max) max=j-i+1;// }// }// } //枚举中间位置 for(i=0;i<m;i++){ //奇数 for(j=0;i-j>=0&&i+j<m;j++){ if(s[i-j]!=s[i+j])break; if(j*2+1>max){ max=j*2+1; x=p[i-j]; y=p[i+j]; } } //偶数 for(j=0;i-j>0&&i+j+1<m;j++){ if(s[i-j]!=s[i+j+1])break; if(j*2+2>max) { max=j*2+2; x=p[i-j]; y=p[i+j+1]; } } } for(i=x;i<=y;i++){ printf("%c",buf[i]); } printf("\n"); printf("%d\n",max); return 0;}//输入:Confuciuss say:Madam,i'm Adam.
输入输出示例:
阅读全文
0 0
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文串模版
- 最长回文子串
- 最长回文子串
- 03 Ext js学习之初识Maven
- 如何用手机访问电脑本地localhost网页, 以调试项目?
- unity的shadow
- 正则表达式
- c++: error: unrecognized command line option ‘-std=c++14’
- 最长回文串
- DAY 47 数据库--MySQL4
- 最长公共子序列与最长公共子串
- #MIUI9#也许是最快的安卓系统
- Java根据词频生成批量数据
- leetcode 126. Word Ladder II
- 学习slam的书籍
- Mybatis一对多的处理
- HDU-2017 多校训练赛2-1006-Funny Function