AT2162题解
思路
这题用简单的暴力其实就能过了。
我们只需计算出 \(s\) 的末尾与 \(t\) 的开头重合的地方,结果为 \(2\times n-\text{重合部分长度}\)。
而关键就在如何求出重合部分的长度。
我们可以枚举第一个字符串中的各位,如果发现 \(s[i]=t[0]\),那么枚举第二个字符串,如果从 \(s[i]\) 到 \(s[n-1]\) 一直与 \(t[0]\) 到 \(t[j-i]\) 重合,才可将重合长度设为 \(n-i\)。
详细见代码。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=0;
bool f;
string s,t;
cin>>n>>s>>t;
for(int i=0;i<n;i++){
f=1;
if(s[i]==t[0]){//如果发现当前位置与 t 的首位相同
for(int j=i+1;j<n;j++)//从 s[i+1] 到 s[n-1] 依次枚举
if(s[j]!=t[j-i]) f=0;
if(!f) continue;//不满足条见就结束本次循环(不是退出)
cnt=n-i;
break;
}
}
cout<<2*n-cnt;
}
完结撒花~~~

浙公网安备 33010602011771号