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



京公网安备 11010502036488号