题解 | #至多包含K种字符的子串#

至多包含K种字符的子串

https://www.nowcoder.com/practice/04c926ef687340c3842a72edb5c23ede

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param k int整型
     * @return int整型
     */
    public int longestSubstring (String s, int k) {
        // write code here
        int left = 0, right = 0, count = 0, subcount = 0;
        HashMap<Character, Integer> frequency = new HashMap<>();

        while(right<s.length()){
            int value = frequency.getOrDefault(s.charAt(right), 0) + 1;
            frequency.put(s.charAt(right), value);
            right++;
            if (value == 1) {
                count++;
            }

            if (count <= k) {
                subcount = Math.max(subcount, right - left);
            }

            if (count > k) {
                int subValue = frequency.getOrDefault(s.charAt(left), 0) - 1;
                frequency.put(s.charAt(left), subValue);
                left++;
                if (subValue == 0) {
                    count--;
                }
            }
        }

        return subcount;
    }
}

滑动窗口解法,左右移动

#23届找工作求助阵地##我的实习求职记录#
全部评论

相关推荐

暮雨轻歌:看起来hr不能接受我菜查看图片
点赞 评论 收藏
分享
学不完不睡觉11:一眼点评,不过,看运气吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务