<02.23>Leetcode100

发布于:2025-02-24 ⋅ 阅读:(11) ⋅ 点赞:(0)

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

 

 


网站公告

今日签到

点亮在社区的每一天
去签到