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