class Solution {public String minWindow(String s, String t) {if (s.length() < t.length()) {return "";}HashMap<Character, Integer> count = new HashMap<>();// 统计组成t字符串的每个字符数量// count[n]<0:滑动窗口缺少多少个n字符// count[n]==0:滑动窗口刚好包含多少个n字符// count[n]>0:滑动窗口超过多少个n字符
… if (count.get(d) < 0) {formed--;}}}}return length == Integer.MAX_VALUE ? "" : s.substring(start, start + length);}
}
class Solution {public String minWindow(String ss, String tt) {char[] str = ss.toCharArray();char[] t = tt.toCharArray();HashMap<Character,Integer> count = new HashMap<>();//统计组成t字符串中每个字符的数量for(char c:t){count.put(c,count.getOrDefault(c,0)-1);}int val_len = 0;//子串中有效的长度int ans_len = Integer.MAX_VALUE;//记录这个答案串的长度int ans_start_l = 0;//记录这个答案串的起始位置for(int l=0,r=0;r<str.length;r++){char c = str[r];//更新窗口中的字符计数if(count.containsKey(c)){//如果是t中包含的字段if(count.get(c)<0){//并且此时我们缺少它val_len ++;}count.put(c,count.get(c)+1);//是t中包含的字段 但是我们不缺少它}//当窗口中的字符满足条件时候 尝试缩小窗口while(val_len == t.length){if(r-l+1<ans_len){//更优的答案ans_start_l = l;ans_len = r - l + 1 ;}char d = str[l];//我们要尝试删去l ++ ;if(count.containsKey(d)){count.put(d,count.get(d)-1);if(count.get(d)<0)val_len--;//这里可以不再符合条件了 因为符合条件的那个情况我们已经记录了}}}// if(ans_len == Integer.MAX_VALUE){pw.print("\"\"");}// else{// pw.print("\"");// for(int i=ans_start_l;i<ans_start_l+ans_len;i++)pw.print(str[i]);// pw.print("\"");// }return ans_len == Integer.MAX_VALUE ? "" : new String(str).substring(ans_start_l, ans_start_l + ans_len);}
}
import java.util.*;
import java.io.*;
public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));char[] str = br.readLine().toCharArray();char[] t = br.readLine().toCharArray();HashMap<Character,Integer> count = new HashMap<>();//统计组成t字符串中每个字符的数量for(char c:t){count.put(c,count.getOrDefault(c,0)-1);}int val_len = 0;//子串中有效的长度int ans_len = Integer.MAX_VALUE;//记录这个答案串的长度int ans_start_l = 0;//记录这个答案串的起始位置for(int l=0,r=0;r<str.length;r++){char c = str[r];//更新窗口中的字符计数if(count.containsKey(c)){//如果是t中包含的字段if(count.get(c)<0){//并且此时我们缺少它val_len ++;}count.put(c,count.get(c)+1);//是t中包含的字段 但是我们不缺少它}//当窗口中的字符满足条件时候 尝试缩小窗口while(val_len == t.length){if(r-l+1<ans_len){//更优的答案ans_start_l = l;ans_len = r - l + 1 ;}char d = str[l];//我们要尝试删去l ++ ;if(count.containsKey(d)){count.put(d,count.get(d)-1);if(count.get(d)<0)val_len--;//这里可以不再符合条件了 因为符合条件的那个情况我们已经记录了}}}if(ans_len == Integer.MAX_VALUE){pw.print("\"\"");}else{pw.print("\"");for(int i=ans_start_l;i<ans_start_l+ans_len;i++)pw.print(str[i]);pw.print("\"");}pw.close();br.close();}
}