Blue Jeans POJ 3080 (串)

xiaoxiao2021-02-28  62

题意很简单,找最长且字典序最大的公共子串,并且长度不能小于3

方法是暴力,找出第一个字符串的所有子串,依次与后面的字符串匹配。

#include <stdio.h> #include <string.h> #include <algorithm> #include<iostream> using namespace std; char a[15][65]; char temp[65]; char answer[65]; int len; int k; int Find; int cases,n; int main() { cin>>cases; while(cases--) { Find=0; cin>>n; memset(answer,'\0',sizeof(answer)); for(int i=1; i<=n; ++i) scanf("%s",a[i]); for(int i=1; i<=60; ++i) { for(int j=0; j<=60-i; ++j) { int flag=1; len=0; for(k=j;; k++) { temp[len++] = a[1][k]; if(len == i) break; } temp[len]='\0'; //printf("%s\n",temp); for(k=2; k<=n; ++k) { if(!strstr(a[k],temp)) { flag=0; break; } } if(flag) { Find=1; if(strlen(answer)<strlen(temp)) strcpy(answer,temp); else if(strcmp(answer,temp)>0) strcpy(answer,temp); } } } if(!Find||strlen(answer)<3) { cout<<"no significant commonalities"<<endl; } else { printf("%s\n",answer); } } return 0; }

转载请注明原文地址: https://www.6miu.com/read-81131.html

最新回复(0)