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。
该题考察的知识点包括:
- 字符串和字符的基本操作。
- 循环控制和条件判断。
- 滑动窗口算法。
代码解释:
- 在 maxCount 方法中,通过一个布尔型数组 st 来记录字符串 t 中的字符是否出现过。
- 遍历字符串 t 的字符,将对应的字符位置在 st 数组中标记为 true,表示该字符在 t 中出现过。
- 使用一个整数列表 id 来记录在 t 中出现过的字符的索引(即字符 'a' 对应索引 0,字符 'b' 对应索引 1,以此类推)。
- 初始化一个整数数组 cnt,用于统计当前窗口内每个字符出现的次数。
- 使用一个整数变量 res 来记录最大出现次数。
- 遍历字符串 s 的字符,更新窗口内字符出现次数,即将对应字符位置在 cnt 数组中加一。同时,如果窗口大小大于等于 k,将窗口最左侧字符的出现次数减一。
- 如果当前窗口大小大于等于 k,遍历 id 列表中的字符索引,计算在窗口内这些字符的出现次数之和,并更新 res 为其与当前 res 的较大值。
- 返回 res,即最大的可能包含的牛编号的出场次数。