30:字元環

自為風月馬前卒發表於2017-03-07

30:字元環

總時間限制: 
1000ms
 
記憶體限制: 
65536kB
描述

有兩個由字元構成的環。請寫一個程式,計算這兩個字元環上最長連續公共字串的長度。例如,字串“ABCEFAGADEGKABUVKLM”的首尾連在一起,構成一個環;字串“MADJKLUVKL”的首尾連在一起,構成一個另一個環;“UVKLMA”是這兩個環的一個連續公共字串。

輸入
一行,包含兩個字串,分別對應一個字元環。這兩個字串之間用單個空格分開。字串長度不超過255,且不包含空格等空白符。
輸出
輸出一個整數,表示這兩個字元環上最長公共字串的長度。
樣例輸入
ABCEFAGADEGKABUVKLM MADJKLUVKL
樣例輸出
6
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cmath>
 7 #include<stdio.h>
 8 #include<string.h>
 9 #include<iomanip>
10 using namespace std;
11 string a,b;
12 int ans=0,tmp=0,x;
13 int main() {
14     cin>>a>>b;
15     int la=a.length();
16     int lb=b.length();
17     a+=a;
18     b+=b;
19     x=min(la,lb);
20     for(int i=0; i<la; i++)
21         for(int j=0; j<lb; j++) {
22             while(a[i+tmp]==b[j+tmp]&&tmp<=x)
23                 tmp++;
24             ans=max(ans,tmp);
25             tmp=0;
26         }
27     ans=min(ans,la);
28     ans=min(ans,lb);
29     printf("%d\n",ans);
30     return 0;
31 }

 

相關文章