返回题解分享
讨论 / 题解分享/ 帖子详情

子串简写(编程题) - 题解

#include <bits/stdc++.h>
using namespace std;

int main()
{
int k;
cin >> k; // 输入K值
string a;
cin >> a;//输入字符串
char x,y;
cin >> x >> y;//输入两个字符

vector<int> dp(a.size());//定义DP数组
//DP数组的含义是,截至字符串下标为i的字符(包括下标为i的字符)一共有多少个首字符c1

dp[0] = a[0] == x;//判断字符串的开头是不是首字符

long long int jie = 0;//存储结果

for(int i = 1;i < a.size();i++)
{
    if(a[i] == x)
    {
        dp[i] = dp[i-1] + 1;//如果是首字符就更新dp数组
    }
    else
    {
        dp[i] = dp[i - 1];//如果不是首字符dp数组就是前一个的值
        if(a[i] == y && i >= k - 1)//如果是尾字符且前k个在有效范围内,则更新结果
            jie += dp[i - k + 1];//加上截至第i-k+1个字符中有多少的首字符
    }
}

cout << jie;// 输出结果

}
0 回复 0 转发 5 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!