算法实现列表
- 最小覆盖子串
- 字符串排列
- 找所有字母异位词
- 最长无重复子串
Java基础
- HashMap中的getOrDefault(key, defaultValue)函数说明:如果map中没有key对应的键值value,则返回默认值defaultValue。
参考代码
- 最小覆盖子串
给你两个字符串S和T,请你在S中找到包含T中全部字母的最短子串。 如果S中没有这样一个子串,则算法返回空串,如果存在这样一个字串,则可以认为答案是唯一的。比如输入S = “ADBECFEBANC”,T = “ABC”,算法应该返回“BANC”。
package com.company;
import static java.lang.System.out;
import java.util.*;
public class Main {
public static String minWindow(String s, String t){
HashMap<Character, Integer> need = new HashMap<>(), window = new HashMap<>();
for(char c: t.toCharArray()){
need.put(c, need.getOrDefault(c, 0) + 1);
}
int left = 0, right = 0;
int valid = 0;
int start = 0, len = Integer.MAX_VALUE;
while (right < s.length()){
char c = s.charAt(right);
right++;
if (need.containsKey(c)){
window.put(c, window.getOrDefault(c, 0) + 1);
if (window.get(c) == need.get(c))
valid++;
}
while(valid == need.size()){
if (right - left < len){
start = left;
len = right - left;
}
char d