问题标题: 酷町堂:1470 循环公共字符串

0
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;
} 

 


0
已采纳
梁逸凡
梁逸凡
资深守护
资深守护

把getchar删了就行了

0
臧鸿志
臧鸿志
初级天翼
初级天翼

这题是线性dp,最长公共子序列。还没学到吧

我要回答