滑动窗口-最小子串
package slidewindow; import java.util.HashSet; import java.util.Set; public class MinSubstring { static String minWindow(String s, String t) { // 参数校验 if (s.length() < 1 || t.length() < 1) { return ""; } Set<Character> needed = new HashSet<>(); for (Character c : t.toCharArray()) { needed.add(c); } Set<Character> window = new HashSet<>(); // 窗口游标初始化 int left = 0, right = 0; // 记录最小覆盖子串的起始游标及长度 int start = 0, len = Integer.MAX_VALUE; while (right < s.length()) { if (needed.contains(s.charAt(right))) { window.add(s.charAt(right)); } right++; // 窗口满足收缩条件 while (window.size() == needed.size()) { if (right - left < len) { start = left; len = right - left; } window.remove(s.charAt(left)); left++; } } return len == Integer.MAX_VALUE ? "" : s.substring(start, start + len); } public static void main(String[] args) { String a = minWindow("bcss", "bc"); } }
posted on 2020-09-17 14:35 www_practice 阅读(202) 评论(0) 编辑 收藏 举报