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();
}
}