栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Leetcode 76-最小覆盖子串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode 76-最小覆盖子串

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

注意:

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

题解

题解转载自图解Leetcode

class Solution {
    public String minWindow(String s, String t) {
        int[] arrayT = new int[52];
        int[] arrayS = new int[52];

        int validAllCount = 0;
        // 对目标数据计数
        for (char c : t.toCharArray()) {
            arrayT[getIndex(c)]++;
            if (arrayT[getIndex(c)] == 1) {
                validAllCount++;
            }
        }
        // 初始化左右指针
        int l = 0, r = 0;

        // 初始化最小的字符串长度及开始索引
        int minLen = Integer.MAX_VALUE;
        int start = 0;

        // 校验值初始化,当valid与
        int valid = 0;

        while (r < s.length()) {
            char cur = s.charAt(r);
            r++;
            // 逻辑代码,窗口内数据更新
            int index = getIndex(cur);
            if (arrayT[index] > 0) {
                arrayS[index]++;
                if (arrayT[index] == arrayS[index]) {
                    valid++;
                }
            }

            // 满足条件收缩左指针
            while (valid == validAllCount) {
                // 存储满足条件的数据
                if (r - l < minLen) {
                    start = l;
                    minLen = r - l;
                }
                // 获取左指针即将移除的元素
                char curDel = s.charAt(l);
                l++;
                // 逻辑代码,窗口内数据更新
                int indexDel = getIndex(curDel);
                if (arrayS[indexDel] > 0) {
                    if (arrayT[indexDel] == arrayS[indexDel]) {
                        valid--;
                    }
                    arrayS[indexDel]--;
                }
            }
        }

        return minLen == Integer.MAX_VALUE ? "" : s.substring(start, start + minLen);
    }

    private int getIndex(char c) {
        return c - 'a' >= 0 ? c - 'a' : c - 'A' + 26;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号