描述有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。
输入一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。输出输出一个整数,表示这两个字符环上最长公共字符串的长度。样例输入ABCEFAGADEGKABUVKLM MADJKLUVKL样例输出6除暴力枚举外,可否有更好的解法?或者条件的优化?#include <iostream> using namespace std; int main(int argc, char *argv[]) { string a,b; cin>>a>>b; int maxsub=0,crtsub; int la=a.size(),lb=b.size(); for(int i=0;i<la;i++) { for (int j=0;j<lb;j++) { if (a[i]==b[j]) { crtsub=0; for(int m=i,n=j,k=0;k<(la<lb?la:lb);m=(m+1)%la,n=(n+1)%lb,k++) { if (a[m]==b[n]) { crtsub++; } else break; } maxsub=maxsub<crtsub?crtsub:maxsub; } } } cout<<maxsub; }
Problem 30: 字符环
最新推荐文章于 2024-02-13 11:42:07 发布