E题:「水」悠悠碧波

仔细读题后发现是一种求子串的题,可能会涉及KMP算法,

但是萌新表示不会KMP算法/(ㄒoㄒ)/~~

又想很快解出这道题,试了试C++ string自带的find函数(经过查询资料得知find函数使用的不是KMP算法,而是低效的逐个匹配的算法,如有错误请更正)

我们只需要枚举子串的长度,然后处理即可,具体细节见代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    string ans;
    int len=s.length();
    //枚举子串的长度,最后我们只留下长度最大的 
    for(int i=1;i<s.length();i++){
        string a=s.substr(0,i);//从头部截取的串 
        string b=s.substr(len-i,i);//从尾部截取的串 
        string other=s.substr(i,len-i*2);//除去头和尾剩下的 
        if(a==b&&other.find(a)!=string::npos){//find函数的使用,不会的参考C++文档 
            ans=a;
        }
    }
    cout<<ans;
}

于是此题就AC了~

后来发现KMP算法47ms,find函数372ms~,看来有必要好好学一下KMP