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

固定字符出现最大次数

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

知识点:滑动窗口、

思路:首先,我们创建一个长度为 26 的整型数组 cnt,用于记录字符串 s 中每个字母的出现次数。

  • 我们初始化结果 res 为 0。
  • 然后,我们通过遍历字符串 s,在每个位置上更新 cnt 数组。对于当前位置 i,我们将 s.charAt(i) - 'a' 对应的计数值加 1。
  • 如果窗口的大小大于等于 k(即 i >= k),我们需要将窗口左端所在的字符对应的计数值减 1,以保持窗口的大小为 k
  • 当窗口大小达到 k 时(即 i >= k - 1),我们遍历字符串 t 中的每个字符 c,累加 cnt[c - 'a'] 的值。这个累加结果即为窗口中包含字符串 t 的数量。
  • 我们将上述累加结果 sum 与当前的最大值 res 进行比较,取较大值作为新的 res 值。
  • 最后,返回最大值 res
  • 编程语言:java

    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) {
            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 (char c : t.toCharArray()) {
                        sum += cnt[c - 'a'];
                    }
                    res = Math.max(res, sum);
                }
            }
            return res;
        }
    }
    

    全部评论

    相关推荐

    我是小红是我:学校换成中南
    点赞 评论 收藏
    分享
    Natrium_:这时间我以为飞机票
    点赞 评论 收藏
    分享
    评论
    点赞
    收藏
    分享
    牛客网
    牛客企业服务