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号