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

LeetCode【76】最小覆盖子串

题目:
在这里插入图片描述

思路:
https://segmentfault.com/a/1190000021815411

代码:

public String minWindow(String s, String t) { 
    Map<Character, Integer> map = new HashMap<>();
    //遍历字符串 t,初始化每个字母的次数
    for (int i = 0; i < t.length(); i++) {
        char char_i = t.charAt(i);
        map.put(char_i, map.getOrDefault(char_i, 0) + 1);
    }
    int left = 0; //左指针
    int right = 0; //右指针
    int ans_left = 0; //保存最小窗口的左边界
    int ans_right = -1; //保存最小窗口的右边界
    int ans_len = Integer.MAX_VALUE; //当前最小窗口的长度
    //遍历字符串 s
    while (right < s.length()) {
        char char_right = s.charAt(right);
        //判断 map 中是否含有当前字母
        if (map.containsKey(char_right)) {
            //当前的字母次数减一
            map.put(char_right, map.get(char_right) - 1);
            //开始移动左指针,减小窗口
            while (match(map)) { //如果当前窗口包含所有字母,就进入循环
                //当前窗口大小
                int temp_len = right - left + 1;
                //如果当前窗口更小,则更新相应变量
                if (temp_len < ans_len) {
                    ans_left = left;
                    ans_right = right;
                    ans_len = temp_len;
                }
                //得到左指针的字母
                char key = s.charAt(left);
                //判断 map 中是否有当前字母
                if (map.containsKey(key)) {
                    //因为要把当前字母移除,所有相应次数要加 1
                    map.put(key, map.get(key) + 1);
                }
                left++; //左指针右移
            }
        }
        //右指针右移扩大窗口
        right++;
    }
    return s.substring(ans_left, ans_right+1);
}

//判断所有的 value 是否为 0
private boolean match(Map<Character, Integer> map) {
    for (Integer value : map.values()) {
        if (value > 0) {
            return false;
        }
    }
    return true;
}

http://www.kler.cn/news/136714.html

相关文章:

  • yolo自动化项目实例解析(八)自建UI-键鼠录制回放
  • leetcode day4 409+5
  • 数据库相关知识点
  • ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)
  • 【Modern C++】特性学习与补漏
  • ISO21434 信息安全开发流程咨询合规内容和步骤
  • 中间件安全:Apache Tomcat 文件上传.(CVE-2017-12615)
  • Jmeter 吞吐量Per User作用
  • Android AIDL中使用Surface问题
  • 腾讯云服务器标准型S5和CVM标准型S6区别对比_选择攻略
  • pycharm安装教程
  • JavaScript-如何使用变量
  • elasticsearch 概述
  • 「Verilog学习笔记」输入序列连续的序列检测
  • Mistral 7B 比Llama 2更好的开源大模型 (四)
  • 身份证阅读器和社保卡读卡器Harmony鸿蒙系统ArkTS语言SDK开发包
  • PDF控件Spire.PDF for .NET【转换】演示:自定义宽度、高度将 PDF 转 SVG
  • ubuntu20编译安装pkg-config
  • [一周AI简讯]OpenAI宫斗;微软Bing Chat更名Copilot;Youtube测试音乐AI
  • 从哪些方面分析Linux内核源码
  • 如何实现MATLAB与Simulink的数据交互
  • 07_面向对象高级_内部类
  • 智能电销机器人好做吗?ai机器人有没有用?
  • HEVC参考帧技术
  • SVN 修改版本库地址url路径
  • 运维小技能:centos安装宝塔