zoukankan      html  css  js  c++  java
  • 340. Longest Substring with At Most K Distinct Characters

    Given a string, find the length of the longest substring T that contains at most k distinct characters.

    Example 1:

    Input: s = "eceba", k = 2
    Output: 3
    Explanation: T is "ece" which its length is 3.

    Example 2:

    Input: s = "aa", k = 1
    Output: 2
    Explanation: T is "aa" which its length is 2.
    
     

    159. Longest Substring with At Most Two Distinct Characters - Hard 的generalized版本,当counter > k 时进入while循环

    time: O(n), space: O(n)

    class Solution {
        public int lengthOfLongestSubstringKDistinct(String s, int k) {
            Map<Character, Integer> map = new HashMap<>();
            int slow = 0, fast = 0, counter = 0, d = 0;
            
            while(fast < s.length()) {
                char c = s.charAt(fast);
                map.put(c, map.getOrDefault(c, 0) + 1);
                if(map.get(c) == 1)
                    counter++;
                fast++;
                
                while(counter > k) {
                    char tmp = s.charAt(slow);
                    map.put(tmp, map.get(tmp) - 1);
                    if(map.get(tmp) == 0)
                        counter--;
                    slow++;
                }
                d = Math.max(d, fast - slow);
            }
            return d;
        }
    }

    另一种写法:

    class Solution {
        public int lengthOfLongestSubstringKDistinct(String s, int k) {
            if(s == null || s.length() == 0) {
                return 0;
            }
            Map<Character, Integer> map = new HashMap<>();
            int slow = 0, fast = 0, counter = 0, len = 0;
            while(fast < s.length()) {
                char f = s.charAt(fast);
                map.put(f, map.getOrDefault(f, 0) + 1);
                fast++;
                
                while(map.size() > k) {
                    char c = s.charAt(slow);
                    map.put(c, map.get(c) - 1);
                    if(map.get(c) == 0) {
                        map.remove(c);
                    }
                    slow++;
                }
                len = Math.max(len, fast - slow);
            }
            return len;
        }
    }
  • 相关阅读:
    mysql对表操作的各种语句
    Map遍历两种方式
    hibernate3
    Spring、mybaits整合
    mybaits注解
    mybaits 框架运用
    mybatis入门
    限制文本框字符数
    Unity3D Mathf函数
    Unity3d 粒子工具注释
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10302397.html
Copyright © 2011-2022 走看看