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

面试算法-38-最小覆盖子串

题目

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。

注意:

对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。

class Solution {
    public String minWindow(String s, String t) {
        if (s.length() < t.length()) {
            return "";
        }
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < t.length(); i++) {
            map.put(t.charAt(i), map.getOrDefault(t.charAt(i), 0) + 1);
        }

        int j = 0;
        int min = Integer.MAX_VALUE;
        int start = 0;
        int end = 0;
        for (int i = 0; i < s.length(); i++) {
            if (map.get(s.charAt(i)) != null) {
                map.put(s.charAt(i), map.get(s.charAt(i)) - 1);
                while (allZero(map)) {
                    if (map.get(s.charAt(j)) != null) {
                        map.put(s.charAt(j), map.get(s.charAt(j)) + 1);
                    }
                    j++;
                    if (i - j < min) {
                        min = i - j;
                        start = j - 1;
                        end = i + 1;
                    }
                }

            }
        }
        return s.substring(start, end);

    }

    private boolean allZero(Map<Character, Integer> map) {
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if (entry.getValue() > 0) {
                return false;
            }
        }
        return true;
    }
}

http://www.kler.cn/a/272880.html

相关文章:

  • Golang Gin系列-3:Gin Framework的项目结构
  • 从 SQL 语句到数据库操作
  • go chan底层分析
  • 单片机存储器和C程序编译过程
  • level(三) filterblock
  • SDK调用文心一言如何接入,文心一言API接入教程
  • java入门 - 规范你的代码注释
  • SSH介绍及检测规则思路分析
  • 2024年Microsoft Office计算机二级考试必考45题
  • 19 # 高级类型:索引类型
  • Django生命周期
  • Python的接口自动化unittest测试框架和ddt数据驱动
  • 12 Python多进程
  • 前端基础篇-快速了解 Vue 前端框架(Vue 指令)
  • 提高效率,就信赖快速开发表单平台
  • 如何跨数据源根据一张表字段更新另一张表字段数据
  • IOS面试题object-c 91-100
  • 上传照片怎么改大小?几个图片改大小的方法
  • Codeforces Round 918 (Div. 4)----->E. Romantic Glasses
  • 计算机组成原理-2-计算机的发展应用
  • openEuler-22.03-LTS-SP2更改阿里云yum安装源
  • python异常:pythonIOError异常python打开文件异常
  • 阿里云云服务器ECS端口多个端口号开通教程
  • 组建对等网
  • Qt Excel文件读写
  • 深入理解Linux内核页表映射分页机制原理