例题3-4 最长回文子串
来源:互联网 发布:女友爬树知乎 编辑:程序博客网 时间:2024/04/29 10:10
题目:输入一个字符串,求出其中最长的回文子串。
代码:最原始,很容易想到的版本
#include <stdio.h>#include <string.h>#include <ctype.h>#define MAXN 10000//判断是否是回文int Valid(char* tmp){char s[MAXN];int len=strlen(tmp);int i=0;for(;i<len;i++)if(isalpha(tmp[i]))s[i]=toupper(tmp[i]);s[i]='\0';len=strlen(s);for (i=0;i<len-1-i;i++)if(s[i]!=s[len-1-i]) return 0;return 1;}//返回阿拉伯数字长度int PersonLen(char* tmp){int len=0;while(*tmp) if(isalpha(*tmp++)) len++;return len;}int main(){char s[MAXN],tmp[MAXN],res[MAXN];int len,i,j,first=1;fgets(s,MAXN,stdin);len=strlen(s)-1;//包含了换行for(i=0;i<len;i++)for(j=i;j<len;j++){memcpy(tmp,s+i,j-i+1);tmp[j-i+1]='\0';if(!Valid(tmp)) continue;if(first) {first=0;strcpy(res,tmp);}else if(PersonLen(res)<PersonLen(tmp))strcpy(res,tmp);}if(!first) printf("%s\n",res);else printf("no found\n");return 0;}
输出:
上面方法时间复杂度是O(n^3),考虑书中的方法。以某个字符为中心,向两边搜索。考虑aba和abba两种类型
代码:
#include <stdio.h>#include <string.h>#include <ctype.h>#define MAXN 10000int main(){char a[MAXN],copy[MAXN],pos[MAXN];int i=0,j=0,len,m,n,tmplen,startpos,endpos;fgets(a,sizeof(a),stdin);len=strlen(a);for(;i<len;i++){if(isalpha(a[i])){copy[j]=toupper(a[i]);pos[j++]=i;}}//第一个字符显然是满足的len=1;startpos=0;for(i=0;i<j;i++){for(m=i-1,n=i+1;m>=0&&n<j;m--,n++){if(copy[m]!=copy[n]) break;tmplen=n-m+1;if (tmplen>len){len=tmplen;startpos=m;}}for (m=i,n=i+1;m>=0&&n<j;m--,n++){if(copy[m]!=copy[n]) break;tmplen=n-m+1;if (tmplen>len){len=tmplen;startpos=m;}}}endpos=startpos+len-1;for(i=pos[startpos];i<=pos[endpos];i++)printf("%c",a[i]);printf("\n");return 0;}
时间复杂度为O(n^2)
网上还介绍了一种时间复杂度为O(n)的算法,以后再写。
0 0
- 例题3-4 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- mysql不能启动报error2013错误的解决办法
- TCP stream vs UDP message
- intel media SDK(三)
- SQL表连接查询(inner join、full join、left join、right join)
- secure CRT常用的查看服务器日志命令
- 例题3-4 最长回文子串
- hdoj 1166 敌兵布阵
- atitit.RESTful服务的概览and框架选型
- 回调函数
- OpenGL: Alpha融合和图片透明度[AlphaBlend]
- 性能调优攻略
- 黑马程序员 用OC实现的一个计算文件夹下代码行数的小程序
- mysql导入导出
- leetcode-Word Break II