美文网首页程序员
力扣 76 二进制求和

力扣 76 二进制求和

作者: zhaojinhui | 来源:发表于2020-08-20 10:26 被阅读0次

题意:给定两个字符串s和t,找出s中能覆盖t的最短字符串

思路:具体见代码注释

思想:滑动窗口

复杂度:时间O(n),空间O(n)

class Solution {
    public String minWindow(String s, String t) {
        // 记录t的字符出现的个数
        int[] map = new int[256];
        int m = s.length();
        int n = t.length();
        for(int i=0;i<n;i++) {
            map[t.charAt(i)]++;
        }
        if(m < n)
            return "";
        // 统计当前s中出现t的字符个数
        int cnt = 0;
        // 窗口的开始
        int start = 0;
        // 窗口的结束
        int end = 0;
        // 结果
        String res = "";
        // 当前最大长度
        int max = m + 1;
        while(end < m) {
            int cur = s.charAt(end++);
            // 字符未被统计过,加入cnt
            if(map[cur]>0) {
                cnt++;
            }
            // 把加入到窗口的字符从map中移除
            map[cur]--;
            // cnt == n,缩小窗口直到cnt != n
            while(start<end && cnt == n) {
                // 当前字符串更小
                if(max > (end - start)) {
                    max = end - start;
                    res = s.substring(start, end);
                }
                int cur1 = s.charAt(start++);
                // 把移除窗口的字符加回到map中
                map[cur1]++;
                // 移除的字符为统计过的字符,cnt--
                if(map[cur1] > 0)
                    cnt--;
            }
        }
        // 没有在s中找到合法的字符串返回“”
        if(max == m + 1)
            return "";
        return res;
    }
}

相关文章

  • 力扣 76 二进制求和

    题意:给定两个字符串s和t,找出s中能覆盖t的最短字符串 思路:具体见代码注释 思想:滑动窗口 复杂度:时间O(n...

  • LeetCode 67. 二进制求和 | Python

    67. 二进制求和 题目来源:力扣(LeetCode)https://leetcode-cn.com/proble...

  • 力扣 67 二进制求和

    题意:给定两个二进制字符串,求和 思路:遍历两个字符串 如果第一个字符穿没便利完,则carry加上第一个字符串当前...

  • LeetCode 力扣 67. 二进制求和

    题目描述(简单难度) 两个二进制数相加,返回结果,要注意到字符串的最低位代表着数字的最高位。例如 "100" 最高...

  • 滑动窗口详解

    读完本文,你可以去力扣拿下如下题目: 76.最小覆盖子串[https://leetcode-cn.com/prob...

  • 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 示例 1:输入: ...

  • 二进制求和

  • 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入...

  • 二进制求和

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-...

  • 二进制求和

    LeetCode第67题 题目描述: 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且...

网友评论

    本文标题:力扣 76 二进制求和

    本文链接:https://www.haomeiwen.com/subject/fmksjktx.html