AcWing 4960. 子串简写
原题链接
中等
作者:
努力人
,
2025-04-05 19:52:24
· 广东
,
所有人可见
,
阅读 1
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1000010;
int k;
string s;
char c1,c2;
int main()
{
cin>>k>>s>>c1>>c2;
LL n=s.size();
LL ans=0;
for(int i=0;i<n;i++)
{
if(s[i] == c1)
{
for(int j=i+1 ;j<n; j++)
{
if( s[j] == c2) {
if( j-i+1 >= k) ans++;
}
}
}
}
cout<<ans;
return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int N=1000010;
int k;
string s;
char c1,c2;
vector<int> pc1;
int main()
{
cin>>k>>s>>c1>>c2;
LL n=s.size();
LL ans=0;
for(int i=0;i<n;i++)
{
if(s[i] == c1) pc1.push_back(i);
if(s[i] == c2) {
if(!pc1.size() || i-k+1 <0) continue;
int l=0, r=pc1.size()-1;
while(l<r){
int mid= l+r+1 >>1;
if(pc1[mid] <= i-k+1) l=mid;
else r=mid-1;
}
if(pc1[l] <= i-k+1) ans+=(l+1);
}
}
cout<<ans;
return 0;
}