双重循环容易超时
2023-10-13 19:17:51
发布于:广东
11阅读
0回复
0点赞
统计符合条件的字串,实质上就是在条件范围内遍历头部,然后找所有大于等于k的c2的数量。
#include <bits/stdc++.h>
using namespace std;
const long long N=5e5+10;
string str;
long long k,sum=0;
char c1,c2;
long long dp[N];//表示i开头C2的数量
int main()
{
cin>>k;
cin>>str;
cin>>c1>>c2;
int len=str.size(); //abababdb a b
for(int i=len-1;i>=0;--i)
{
dp[i]=dp[i+1];//以i结尾的数量刚开始是i+1结尾的c2数量
if(str[i]==c2) dp[i]++;//如果找到str[i]里面c2字符,那么需要+1
}
for(int i=0;i+k-1<len;i++)
{
if(str[i]==c1) sum+=dp[i+k-1];
}
cout<<sum;
}
这里空空如也
有帮助,赞一个