当前位置: 首页 > news >正文

<02.23>Leetcode100

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

 

 

http://www.dtcms.com/a/34147.html

相关文章:

  • 吃一堑长一智
  • 《操作系统 - 清华大学》 8 -5:进程管理:进程生命周期管理
  • LeetCode 热题 100 160. 相交链表
  • 【Linux】线程的其他概念(理论篇)
  • 自然语言处理中的检索增强生成研究综述
  • 【开源项目】分布式文本多语言翻译存储平台
  • Spring Boot 启动类的原理与作用
  • 3D Gaussian Splatting(3DGS)的核心原理
  • 深入理解与实战SQL IFNULL()函数
  • thinking in java - 泛型2
  • 0083.基于springboot+uni-app的社区车位租赁系统小程序+论文
  • 顺序储存的二叉树(堆)
  • 【Linux网络】网络编程基础
  • VScode+stfp插件,实现文件远程同步保存【2025实操有效】
  • Java 中的 List 和 Map:全面解析与实际应用
  • 国产OS上完整编译Qt5.15、搭建基本开发环境需要的库
  • 基于python的旅客游记和轨迹分析可视化系统设计(新)
  • DPVS-3: 双臂负载均衡测试
  • 架构对比分析
  • 【Python爬虫(60)】解锁社交媒体数据宝藏:Python爬虫实战攻略
  • 【Linux】基于UDP/TCP套接字编程与守护进程
  • 【环境安装】
  • 编程小白冲Kaggle每日打卡(13)--kaggle学堂:<机器学习简介>基础数据探索
  • 从零开始:VirtualBox安装Ubuntu 24.04.1 LTS
  • 2025牛客寒假算法基础集训营6 个人补题 ACIJKL
  • 算法常见八股问题整理
  • 车载DoIP协议 --- TCP详细解析
  • 洛谷B3636
  • 关于GeoPandas库
  • CMOS图像传感器——偏振光图像传感器技术