一、找工作C++编程01--匹配个数

 给出字符串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
输出

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;
}

 

猜你喜欢

转载自blog.csdn.net/moshangqingcheng/article/details/80861606