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 }