字符环题解&教程
2024-06-10 08:35:26
发布于:上海
13阅读
0回复
0点赞
//字符环题解&教程
#include<iostream>
#include<string>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;
s1.append(s1);//s1后边拼接一个自己,模拟一个环的效果
s2.append(s2);//同s1
int longest_same_subsl=0;//定义int类型变量最长的相同子串的长度——longest_same_substring_length,缩写longest_same_subsl,由于求最大值赋初值为0
for(int i=0;i<s1.size();i++){
//i循环遍历开始索引
if(s1.size()-i<longest_same_subsl)break;//如果剩下的过程中最大长度的子串长度也不够超过longest_same_subsl,那么退出循环
for(int j=longest_same_subsl+1;j<=s1.size()-i;j++){//longest_same_subsl是目前为止最长,所以我们要做到比它更长,故j从longest_same_subsl+1开始枚举
//j循环遍历长度
string subs=s1.substr(i,j);//求出当前的子串
if(s2.find(subs)<s2.size()&&subs.size()>longest_same_subsl)//判断当前子串长度是否大于longest_same_subsl
longest_same_subsl=subs.size();//如果是,重新赋值longest_same_subsl
}
}if(longest_same_subsl>s1.size()/2)
cout<<s1.size()/2;//如果它的长度大于了原来s1的长度那么说明计算有问题,是原来s1的长度啦
else if(longest_same_subsl>s2.size()/2)
cout<<s2.size()/2;//同上,如果超出s2的长度,改为s2的长度。一般来说s2的长度小于s1的长度,所以先判断s1再判断s2
else cout<<longest_same_subsl;
return 0;
}
最后声明:这是我小号的东西,大号搬过来,1000%不犯法
这里空空如也
有帮助,赞一个