poj 3080
2015-12-11 17:46
197 查看
题意就是找多条字符串的最长公共子串
首先比较前两个,然后找出他们的子串,然后子串和下一个比较。如果没有子串了 输入no
没了 一开始卡在一个小错误里 卡了很久 这道题还可以用KMP 暴力 后缀数组 往后贴出。还有个细节就是如果存在多个长度一样的子串,那么输出字典序最小的
贴上代码
首先比较前两个,然后找出他们的子串,然后子串和下一个比较。如果没有子串了 输入no
没了 一开始卡在一个小错误里 卡了很久 这道题还可以用KMP 暴力 后缀数组 往后贴出。还有个细节就是如果存在多个长度一样的子串,那么输出字典序最小的
贴上代码
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; int s,t; char a[11][65]; char tmp[65]; int lcs(char *a,char *b) { // printf("%s\n",b); int x=strlen(a); int y=strlen(b); int l[65][65]; memset(l,0,sizeof(l)); char mp1[65]; memset(mp1,'\0',sizeof(mp1)); int ma=0; for(int i=0; i<x+1; i++) l[i][0]=0; for(int i=0; i<y+1; i++) l[0][i]=0; for(int i=1; i<=x; i++) { for(int j=1; j<=y; j++) { if(a[i-1]==b[j-1]) { l[i][j]=l[i-1][j-1]+1; } else { l[i][j]=0; } if(l[i][j]>=ma) { char t0[65]; memset(t0,'\0',sizeof(t0)); int t1=i; int t2=j; int tma=l[i][j]; t1--; t2--; t0[tma--]='\0'; while(t1>=0&&t2>=0) { if(a[t1]==b[t2]) { t0[tma--]=a[t1]; t1--; t2--; } else break; } //printf("%d\n",ma); if(l[i][j]>ma) { ma=l[i][j]; strcpy(mp1,t0); continue; } if(l[i][j]==ma) if(strcmp(mp1,t0)>0) strcpy(mp1,t0); } } } memset(tmp,'\0',sizeof(tmp)); strcpy(tmp,mp1); // printf("%s\n",tmp); return ma; } int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); getchar(); for(int i=1; i<=n; i++) { gets(a[i]); } strcpy(tmp,a[1]); int flag=1; for(int i=2; i<=n; i++) { int jg=lcs(a[i],tmp); //printf("%d\n",jg); if(jg<3) { flag=0; printf("no significant commonalities\n"); break; } } if(flag) printf("%s\n",tmp); } }
相关文章推荐
- 题目:删除指定字符
- USB Type-C 设计
- Wifi涉及到的API
- erlang四大behaviour之四-supervisor(转载)
- JavaScript语言基础知识10
- ______________从时间超限到800ms 到200ms——————2098
- iOS开发用正则表达式验证身份证,邮箱,手机号等
- 过滤特殊字符
- StringBuffer的用法
- html5 websocket 简单实现
- nginx+tomcat+redis(单点)
- 完数 hdoj1406
- 使用Kompex事务功能
- 你还在为无法完美卸载SQL Server 2008 R2而烦恼吗?
- Nginxs学习-1安装Nginx 将Nginx作为静态网页服务器
- 1118有限自动机的识别与构造
- ubuntu系统安装mysql(deb-bundle包)
- RTB竞价中的cookie mapping技术
- 自己项目中做的UI布局
- 自己项目中做的UI布局