LeetCode76:最小覆盖字串

    技术2022-07-17  80

    class Solution { public String minWindow(String s, String t) { if(t.length()> s.length()) return ""; HashMap<Character, Integer> map = new HashMap<>(); for(char c: t.toCharArray()) map.put(c, map.getOrDefault(c, 0) + 1); int counter = map.size(); // 目标字符串中的不同字符种类 int begin = 0, end = 0; // 窗口起始、结束点 int len = Integer.MAX_VALUE; int head = 0; while(end < s.length()) { char c = s.charAt(end); if( map.containsKey(c) ) { map.put(c, map.get(c) - 1); if(map.get(c) == 0) counter--; } end++; while(counter == 0) { // 此时 Map 的 value 全部 <= 0 char tmpc = s.charAt(begin); if( map.containsKey(tmpc) ) { map.put(tmpc, map.get(tmpc) + 1); if(map.get(tmpc) > 0) counter++; } //---------- if(end - begin < len) { len = end - begin; head = begin; } //---------- begin++; } } if(len == Integer.MAX_VALUE ) return ""; return s.substring(head, head+len); } }

     

    Processed: 0.008, SQL: 9