首页 > 代码库 > 字符串 自己看看留个纪念而已
字符串 自己看看留个纪念而已
题目poj1226(可暴力,可后缀数组)
//题意:给定n个串,求一个最大子串长度,//使得它或者它的逆向串在每个串中出现。 //思路:先求出最短的串sho[],然后枚举答案长度ans(len~1)。//于是sho[]就被分成了len-ans+1个子串pos[],//再分别求出这些字串的反串inv[],//判断pos[]和inv[]是否都出现在所有的串中。#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;struct tt{ char s[110]; int len;}aa[110];struct ttt{ char a[110],b[110]; int len;}bb[10000];int cmp(ttt x,ttt y){ return x.len>y.len;};int main () { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int minn=210000,minid=0; for(int i=0;i<n;i++) { scanf("%s",aa[i].s); aa[i].len=strlen(aa[i].s); if(aa[i].len<minn) minn=aa[i].len,minid=i; } int id=0; for(int i=0;i<minn;i++) { for(int j=i;j<minn;j++) { int kk=0; for(int k=i;k<=j;k++) bb[id].a[kk++]=aa[minid].s[k]; bb[id].a[kk]=‘\0‘; kk=0; for(int k=j;k>=i;k--) bb[id].b[kk++]=aa[minid].s[k]; bb[id].b[kk]=‘\0‘; bb[id].len=kk; id++; } } sort(bb,bb+id,cmp); int exist,ans=0; for(int ii=0;ii<id;ii++) { exist=1; for(int i=0;i<n;i++) { if(strstr(aa[i].s,bb[ii].a)==0&&strstr(aa[i].s,bb[ii].b)==0) { exist=0; break; } } if(exist){ans=bb[ii].len;break;} } printf("%d\n",ans); } return 0 ;}
字符串 自己看看留个纪念而已
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。