当前位置:   article > 正文

美团校招机试 - 小美的MT(20240309-T3)

美团校招机试 - 小美的MT(20240309-T3)

题目来源

美团校招笔试真题_小美的MT

题目描述

MT 是美团的缩写,因此小美很喜欢这两个字母。

现在小美拿到了一个仅由大写字母组成字符串,她可以最多操作 k 次,每次可以修改任意一个字符。

小美想知道,操作结束后最多共有多少个 'M' 和 'T' 字符?

输入描述

第一行输入两个正整数 n,k,代表字符串长度和操作次数。

第二行输入一个长度为 n 的、仅由大写字母组成的字符串。

  • 1 ≤ k ≤ n ≤ 10^5

输出描述

输出操作结束后最多共有多少个 'M' 和 'T' 字符。

用例

输入5 2
MTUAN
输出4
说明修改第三个和第五个字符,形成的字符串为 MTTAM,这样共有 4 个'M'和'T'。

题目解析

本题我们只需要统计出第二行输入的s串中:

M和T字符的数量:mt_count,以及非M、T字符的数量:not_mt_count。

由于我们最多可以操作k次,即最多将k个非M、T字符修改为M或T字符:

  • 若 not_mt_count >= k,则我们最多增加 k 个 M或T 字符
  • 若 not_mt_count < k,  则我们最多增加 not_mt_count 个 M或T 字符

即最终最多有 mt_count + min(k, not_mt_count) 个 M或T 字符。

JS算法源码

  1. const rl = require("readline").createInterface({ input: process.stdin });
  2. var iter = rl[Symbol.asyncIterator]();
  3. const readline = async () => (await iter.next()).value;
  4. void (async function () {
  5. const [n, k] = (await readline()).split(" ").map(Number);
  6. const s = await readline();
  7. let mt_count = 0;
  8. let not_mt_count = 0;
  9. for (let c of s) {
  10. if (c == "M" || c == "T") {
  11. mt_count++;
  12. } else {
  13. not_mt_count++;
  14. }
  15. }
  16. const ans = Math.min(k, not_mt_count) + mt_count;
  17. console.log(ans);
  18. })();

Java算法源码

  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. int n = sc.nextInt();
  6. int k = sc.nextInt();
  7. String s = sc.next();
  8. int mt_count = 0;
  9. int not_mt_count = 0;
  10. for (int i = 0; i < n; i++) {
  11. char c = s.charAt(i);
  12. if (c == 'M' || c == 'T') {
  13. mt_count++;
  14. } else {
  15. not_mt_count++;
  16. }
  17. }
  18. int ans = Math.min(k, not_mt_count) + mt_count;
  19. System.out.println(ans);
  20. }
  21. }

 

Python算法源码

  1. if __name__ == "__main__":
  2. n, k = map(int, input().split())
  3. s = input()
  4. mt_count = 0
  5. not_mt_count = 0
  6. for c in s:
  7. if c == "M" or c == "T":
  8. mt_count += 1
  9. else:
  10. not_mt_count += 1
  11. ans = min(k, not_mt_count) + mt_count
  12. print(ans)

C算法源码

  1. #include <stdio.h>
  2. #include <math.h>
  3. #define MAX_LEN 100001
  4. int main() {
  5. int n, k;
  6. scanf("%d %d", &n, &k);
  7. char s[MAX_LEN];
  8. scanf("%s", s);
  9. int mt_count = 0;
  10. int not_mt_count = 0;
  11. int i = 0;
  12. while (s[i] != '\0') {
  13. if (s[i] == 'M' || s[i] == 'T') {
  14. mt_count++;
  15. } else {
  16. not_mt_count++;
  17. }
  18. i++;
  19. }
  20. int ans = (int) fmin(k, not_mt_count) + mt_count;
  21. printf("%d\n", ans);
  22. return 0;
  23. }

 

C++算法源码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int n, k;
  5. cin >> n >> k;
  6. string s;
  7. cin >> s;
  8. int mt_count = 0;
  9. int not_mt_count = 0;
  10. for (const auto &c: s) {
  11. if (c == 'M' || c == 'T') {
  12. mt_count++;
  13. } else {
  14. not_mt_count++;
  15. }
  16. }
  17. int ans = min(k, not_mt_count) + mt_count;
  18. cout << ans << endl;
  19. return 0;
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/765848
推荐阅读
相关标签
  

闽ICP备14008679号