学习KMP算法时想到的另一种好方法
KMP是一种简化的字符串匹配的方法,思路并没有那么简单。
对于简单的给定的字符串和子串,用c++string库中的substr方法就可以很简单的做到字符匹配!
比如pta上的7-3 病毒感染检测
就可以用如下代码实现:
#include <iostream>
#include <string.h>
using namespace std;
void reverse(string &a){//将字符串反转
int m=a.length();
string d=a;
for(int i=0;i<m-1;i++){
a[i]=a[i+1];
}
a[m-1]=d[0];
}
int compare(string &c,string &a,int q){//将字符串进行比较
string d=a;
int flag=0;
for(int i=0;i<q-1;i++){
reverse(d);
if(c==a||c==d){
flag=1;
break;
}
else flag=0;
}
return flag;
}
int main()
{
string a,b,c,d,e;
int n,m,q,flag=0;
cin>>n;
while(n--){
cin>>a;
cin>>b;
d=a;
q=b.length()-a.length();
for(int j=0;j<=b.length()-a.length();++j){
c=b.substr(j,a.length());
if(compare(c,a,q)){
flag=1;
break;
}
else flag=0;
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
这样子真的简便了特别多!
但是这是一种偷懒的写法,需要对算法规模简化的话还是需要用到kmp算法!