给出字符串S,模式串T和参数k,定义S[i]和T[j]匹配当且仅当S[i-k]-S[i+k]中有字符与T[j]相同。
当S[x] - S[x+T.size()-1] 与 T[0] - T[T.size()-1] 一一匹配,称T在S中有一个匹配。求T在S中匹配个数。
格式
输入
输入|S|,|T|,k,和S,T 其中(0<|T|<=|S|<=2*10^5)(0<K<=20),(S和T中只有A,B,C,D,E这五个字母)
输出
输出匹配次数。
样例 1
输入
10 5 1
AABCDEEAAA
ABCDE
输出
string s,t;
cin>>sl;//输入第一个字符串
cin>>tl;//输入第二个字符串
cin>>k;//输入k值
cin>>s;//输入第一个字符串的长度
return 0;
}
int i,j;
int cnt=0;//计数标志
for(i=0;i+k+tl<sl;i++){
cnt++;
}
}
}
cout<<cnt<<endl;
return 0;
}
当S[x] - S[x+T.size()-1] 与 T[0] - T[T.size()-1] 一一匹配,称T在S中有一个匹配。求T在S中匹配个数。
格式
输入
输入|S|,|T|,k,和S,T 其中(0<|T|<=|S|<=2*10^5)(0<K<=20),(S和T中只有A,B,C,D,E这五个字母)
输出
输出匹配次数。
样例 1
输入
10 5 1
AABCDEEAAA
ABCDE
输出
3
#include <iostream>
#include <string.h>
using namespace std;
int main(){
int sl,tl,k;string s,t;
cin>>sl;//输入第一个字符串
cin>>tl;//输入第二个字符串
cin>>k;//输入k值
cin>>s;//输入第一个字符串的长度
cin>>t;//输入第二个字符串长度
//判断输入是否满足条件
if(sl>2*10^5 && tl>2*10^5 && s.size()>2*10^5 &&t.size()>2*10^5 &&k>20) {return 0;
}
int i,j;
int cnt=0;//计数标志
for(i=0;i+k+tl<sl;i++){
for(j=0;j<k;j++){
/*string考点1、字符串名.substr(i,i+j+t1):截取字符串,从下标i开始,直到i+j+t1-1
string考点2、判断子串是否在字符串中s.find(t),是就返回true,不是就返回false
*/
if(s.substr(i,i+j+tl).find(t)){cnt++;
}
}
}
cout<<cnt<<endl;
return 0;
}