logn_sort 2023-03-08 23:10 采纳率: 50%
浏览 110
已结题

关于#替换字母#的问题,如何解决?(语言-c++)

时间:1s 空间:256M
题目描述:
有长度为 n 的字符串,仅包含小写字母。

小信想把字符串变成只包含一种字母。他每次可以选择一种字符 c,然后把长度最多为 m 的子串中的字符都替换成 c。

小信想知道最少需要操作几次能让字符串只包含一种字母。

输入格式:
第一行包含两个整数 n, m。

第二行包含一个长度为 n 的字符串,只有小写字符。

输出格式:
对于每组测试数据,输出一个整数表示答案。

样例1输入:
5 4
abcab
样例1输出:
1
样例2输入:
5 3
abcab
样例2输出:
2
约定与提示:
对于100%的数据,1≤m≤n≤2⋅105。

对于样例1:把子串 [1,4] 中的字符都变成 'b',或者把子串 [2,5] 中的字符都变成 'a'。

  • 写回答

6条回答 默认 最新

  • 白驹_过隙 算法领域新星创作者 2023-03-09 08:29
    关注
    获得2.55元问题酬金

    回答引自chatgpt

    img

    #include <iostream>
    #include <cstring>
    using namespace std;
    const int N = 200010;
    int n, m;
    char str[N];
    int cnt[26];
    int main()
    {
        cin >> n >> m >> str ;
        int maxv = 0;
        for (int i = 1, j = 0; i <= n; i ++ )
        {
            cnt[str[i] - 'a'] ++ ;
            while (i - j > m || cnt[str[i] - 'a'] + m < i - j + 1)
            {
                cnt[str[j] - 'a'] -- ;
                j ++ ;
            }
            maxv = max(maxv, i - j);
        }
        cout << n - maxv << endl;
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 创建了问题 3月8日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀