题目描述
题目思路
思维题,题型上有点双指针的感觉。如果对字符串进行暴力枚举显然会超时。不妨指针一边移动一边进行记录。当指针A移动到第个字母时,指针B移动到第个字母,并记录之前所有经过的次数。
由于找不到简洁的与的递推关系,这道题用动态规划求解会很复杂,不如双指针法直观。
我的代码
注意答案可能会超出int范围!!改用long long类型存储答案。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
typedef long long ll;
int k;
string str;
char c1;
char c2;
int main() {cin >> k >> str >> c1 >> c2;int i;int j = 0;int n = 0;ll ans = 0;for (i = k-1; i < str.length(); i++){if (str[j] == c1) {n++;}j++;if (str[i] == c2) {ans = ans + n;}}cout << ans;return 0;
}