题解 | #小红的子串#
小红的子串
https://ac.nowcoder.com/acm/problem/260770
思路
滑动窗口 + 前缀和
过程
代码
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const int N = 2e5 + 10;
int n, l, r;
string s;
long long find(int x)
{
int l = 0, r = 0, kind = 0, h[26] = { 0 };
long long ans = 0;
while(r < n)
{
if(h[s[r] - 'a'] ++ == 0) kind ++;
while(kind > x) if(-- h[s[l ++] - 'a'] == 0) kind --;
ans += r - l + 1;
r ++;
}
return ans;
}
int main()
{
cin >> n >> l >> r >> s;
cout << find(r) - find(l - 1) << endl;
return 0;
}