这道题目可以直接用两层for循环遍历,直接找出符合条件的子串并进行统计,代码如下
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n, k;
string s;
char a, b;
int cent = 0;
int main(void)
{
cin >> k;
cin >> s;
cin >> a >> b;
int left = 0, right = k - 1;//定义左右指针,分别移动
int flag_le = 1, flag_ri = 1;//定义左右指针标志,如果为0就暂停移动
int maxn = -1;
for (int i = s.size(); i >= 0; i--) {//寻找边界值,如果寻找到最右边的目标字符就停止
if (s[i] == b) {
maxn = i;
break;
}
}
for (int i = 0; i <= maxn - k + 1; i++) {
for (int j = i + k - 1; j <= maxn; j++) {
if (s[i] == a && s[j] == b) cent++;
}
}
cout << cent << endl;
return 0;
}
但是时间复杂度比较大,最后仅能通过部分案例