Java 题解 | #固定字符出现最大次数#

固定字符出现最大次数

https://www.nowcoder.com/practice/73cc3e22a6ea4d00846f53384e4a6915

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param k int整型
     * @param t string字符串
     * @return int整型
     */
    public int maxCount (String s, int k, String t) {
        // write code here
        boolean[] st = new boolean[26];
        for (char c : t.toCharArray()) {
            st[c - 'a'] = true;
        }
        List<Integer> id = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            if (st[i]) {
                id.add(i);
            }
        }

        int[] cnt = new int[26];
        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            cnt[s.charAt(i) - 'a'] += 1;
            if (i >= k) {
                cnt[s.charAt(i - k) - 'a'] -= 1;
            }
            if (i >= k - 1) {
                int sum = 0;
                for (int x : id) {
                    sum += cnt[x];
                }
                res = Math.max(res, sum);
            }
        }
        return res;
    }
}

修改后的代码编程语言是 Java。

该题考察的知识点包括:

  • 字符串和字符的基本操作。
  • 循环控制和条件判断。
  • 滑动窗口算法。

代码解释:

  1. 在 maxCount 方法中,通过一个布尔型数组 st 来记录字符串 t 中的字符是否出现过。
  2. 遍历字符串 t 的字符,将对应的字符位置在 st 数组中标记为 true,表示该字符在 t 中出现过。
  3. 使用一个整数列表 id 来记录在 t 中出现过的字符的索引(即字符 'a' 对应索引 0,字符 'b' 对应索引 1,以此类推)。
  4. 初始化一个整数数组 cnt,用于统计当前窗口内每个字符出现的次数。
  5. 使用一个整数变量 res 来记录最大出现次数。
  6. 遍历字符串 s 的字符,更新窗口内字符出现次数,即将对应字符位置在 cnt 数组中加一。同时,如果窗口大小大于等于 k,将窗口最左侧字符的出现次数减一。
  7. 如果当前窗口大小大于等于 k,遍历 id 列表中的字符索引,计算在窗口内这些字符的出现次数之和,并更新 res 为其与当前 res 的较大值。
  8. 返回 res,即最大的可能包含的牛编号的出场次数。
全部评论

相关推荐

吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务