0
已解决
题目描述 Description
如果我们把一个字符串首尾相连,则会构成一个字符圆环。现有两个字符串,首尾相连构成字符圆环之后,求这两个字符圆环上公共字符串最长是多长(区分大小写)。
如:一个字符串“ABCDEUVWXYZ”首尾相连构成一个字符圆环;字符串“BSDHJWXYZA”首尾相连构成一个字符圆环,其中最长公共字符串为“WXYZAB”,所以最长的长度为6。
输入描述 Input Description
输入为两行,分别为两个需要连接成字符圆环的字符串,每个字符串占一行,且长度都不超过255。
输出描述 Output Description
输出为一行,为这个字符圆环上最长公共字符串的长度。
样例没过,提交WA70
#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
using namespace std;
string a,b,s1,s2;
int ans;
int main(){
getline(cin,a);
getchar();
getline(cin,b);
s1=a+a;
s2=b+b;
int len1=s1.size(),len2=s2.size();
if(len1>len2){
swap(s1,s2);
len1=s1.size(),len2=s2.size();
}
for(int i=0;i<len1/2;i++){
for(int j=1;j<=len1/2;j++){
int x=s2.find(s1.substr(i,j));
if(x!=-1){
if(j>ans){
ans=j;
}
}
}
}
cout<<ans;
return 0;
}