首页 > 代码库 > POJ_3450_KMP
POJ_3450_KMP
http://poj.org/problem?id=3450
直接暴力枚举第一行的每一个字串,在下面的字符串中查找就行了,注意不符合就及时break。
然后试了一下strstr,发现效率是KMP的3-4倍。
还可以先排序找出最短的字符串,然后暴力,但是sort好像不能对char的二维数组排序,只能用string,string的字符串处理的函数都还没怎么看,就懒得搞了。
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;char a[4005][205];int n;bool cmp(char *x,char *y){ return strlen(x) < strlen(y);}int main(){ while(scanf("%d",&n) && n) { for(int i = 1;i <= n;i++) scanf("%s",a[i]); int len = strlen(a[1]); char t[205],ans[205] = ""; for(int i = 0;i < len;i++) { int cnt = 0; for(int j = i;j < len;j++) { t[cnt++] = a[1][j]; t[cnt] = 0; int flag = 1; for(int k = 2;k <= n;k++) { if(!strstr(a[k],t)) { flag = 0; break; } } if(flag) { if(strlen(t) > strlen(ans) || strlen(t) == strlen(ans) && strcmp(t,ans) < 0) { memcpy(ans,t,sizeof(t)); } } } } if(strlen(ans) == 0) printf("IDENTITY LOST\n"); else puts(ans); } return 0;}
POJ_3450_KMP
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。