题解 P2957 【[USACO09OCT]谷仓里的回声Barn Echoes】

· · 题解

2021.3.7 : 修正错解。

重点:\mathrm{string} 类成员函数(\mathrm{find}\mathrm{substr})。

a=s.substr(n,m):截取字符串 s 中从第 n 位(位数从 0 开始)开始的长度为 m 的字符串并赋给 a

s.find(n):返回字符串 ns 中第一次出现的位置(开头),如果没有找到,则返回 -1

因为数据范围极小,所以直接枚举回声的长度暴力判断即可。

#include<bits/stdc++.h>
using namespace std;
string a,b;
int main(){
    cin>>a>>b; if(a.size()>b.size())swap(a,b);//如果a比b长,先调换位置,避免substr时访问越界
    for(int x=a.size()-1;x>=0;x--){//x代表回声的长度
        string prea=a.substr(0,x),sufa=a.substr(a.size()-x,x);
        string preb=b.substr(0,x),sufb=b.substr(b.size()-x,x);
        if(prea==sufb||preb==sufa)cout<<x<<endl,exit(0);
        //如果一个字符串的前缀等于另一个字符串的后缀,输出答案即可
    } return 0;
}