2020/05/23每日一题
题目:最小覆盖子串
描述:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。

示例

输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"

说明

  • 如果 S 中不存这样的子串,则返回空字符串 “”。
  • 如果 S 中存在这样的子串,我们保证它是唯一的答案。

分析
滑动窗口思想,定义两个指针,表示窗口的左边界 left 和有边界 right,通过改变两个边界扩展(right + 1)和收缩(left - 1)滑动窗口,记录满足题目的最小窗口长度 length = right - left + 1。

代码 C语言实现

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>// 滑动窗口 + hash
char * minWindow(char * s, char * t){int slen = strlen(s);   // 字符串 S 的长度int tlen = strlen(t);    // 字符串 T 的长度if(tlen > slen) {            // 若是T的长度比S长,则直接返回 Nonereturn "";}int tar_hash[128] = {0};//先统计 T 的字符分布int total = 0;for(int i = 0; i < tlen; i++) {tar_hash[t[i]]++;total++;}int cur_hash[128] = {0};int cur_num = 0;int min = INT_MAX;int mid = -1;int left = 0, right = 0;while(right < slen) {char c = s[right];//如果没有该字符,则继续if(tar_hash[c] == 0) {right++;continue;}cur_hash[c]++;//当还没凑齐某字符,总数增加if(cur_hash[c] <= tar_hash[c]) {cur_num++;}//当还没凑齐总数,继续寻找if(cur_num < total) {right++;continue;}//收缩左边界for(int i = left; i <= right; i++) {char ci = s[i];if(tar_hash[ci] == 0) {continue;}cur_hash[ci]--;//总数降低,找到左边界if(cur_hash[ci] < tar_hash[ci]) {cur_num--;left = i;break;}}//[left, right]是找到的字串//printf("FIND:left = %d, right = %d\n", left, right);if(right - left + 1 < min) {min = right - left + 1;mid = left;}left++;right++;continue;}if(mid == -1) {return "";}//利用原字串形成结果s[mid + min] = '\0';return &s[mid];
}

pyhton 代码

from collections import defaultdict
class Solution:def minWindow(self, s: str, t: str) -> str:mem = defaultdict(int)for char in t:mem[char] += 1t_len = len(t)left = 0minLeft = 0minRight = len(s)for right, char in enumerate(s):if mem[char] > 0:t_len -= 1mem[char] -= 1if t_len == 0:while mem[s[left]] < 0:mem[s[left]] += 1left += 1if right-left < minRight-minLeft:minLeft, minRight = left, rightmem[s[left]] += 1t_len += 1left += 1return '' if minRight==len(s) else s[minLeft:minRight+1]

leetcode76-最小覆盖子穿----Coython相关推荐

  1. leetcode76. 最小覆盖子串

    leetcode76. 最小覆盖子串 题目描述 链接: leetcode76. 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的 ...

  2. LeetCode-76: 最小覆盖子串

    题目描述: 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意:如果 s ...

  3. 697. Degree of an Array 频率最高元素的最小覆盖子数组

    [抄题]: Given a non-empty array of non-negative integers nums, the degree of this array is defined as ...

  4. Leetcode-76:最小覆盖子串(困难题) 滑动窗口法超详细解析

    题目链接 https://leetcode-cn.com/problems/minimum-window-substring/ 题目 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有 ...

  5. leetcode76:最小覆盖字串(滑动窗口)

    一:题目 二:思路 思路拿别人的,感觉写的很nice!! 渣渣杰只能膜拜大佬的了 1.滑动窗口的思想: left 指针和 ring 指针,保证两个指针之间的字符串包含所需要的全部字符. 2在保证 1 ...

  6. leetcode76 最小覆盖子串

    给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "ABC& ...

  7. Leetcode--76. 最小覆盖子串

    给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "ABC& ...

  8. LeetCode76——最小覆盖子串

    题目: 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = " ...

  9. cstring判断是否包含子串_leetcode76. 最小覆盖子串

    leetcode76. 最小覆盖子串 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串. 示例: 输入: S = "ADOBECODEBANC&qu ...

最新文章

  1. Utilize Sql Tuning Advisor from Script
  2. R语言neuralnet包构建神经网络模型:基于乳腺癌数据集
  3. python基础教程书籍推荐-Python入门书籍推荐,我的清单
  4. 玩游戏4g计算机的内存不足,windows8.1玩游戏经常提示内存不足
  5. tcp伪报头_TCP和UDP报头的比较
  6. IO模型(epoll)--详解-01
  7. 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
  8. as2的Key.isDown方法在as3的代替
  9. 去除标题_1688如何通过黄金标题引爆流量?
  10. python输出100以内奇数的几种输出方式
  11. Elgamal数字签名原理
  12. Python学习笔记——python基础 4. 函数进阶
  13. Android 宽高比控件
  14. mysql percent_MySQL PERCENT_RANK 函数
  15. 电商系统搭建(商品订单模块)
  16. 数字信号处理——DDS模块设计(3)
  17. Zxing 预览框不变增加扫描区域,仿微信扫到一半就可以成功
  18. Hadoop MapReduce Job 相关参数设置 概念介绍与理解
  19. 删除顽固的文件夹--删不掉的文件夹update处理方法
  20. Python生物信息学数据管理——第5、6章课后习题

热门文章

  1. jquery中hasClass()作用
  2. ADC芯片参数测试技术解析
  3. 《缠中说禅108课》55:买之前戏,卖之高潮
  4. python——金融商品收益率GARCH 模型构建(GARCH 模型)
  5. FFmpeg代码实现最简版本小咖秀
  6. 做一切为了好玩的极客,TiDB Committer 王贺的心路历程
  7. CocoaPods介绍及基本使用
  8. 一张图告诉你,如何渗入企业内网
  9. 网页使用第三方登录 解决方法
  10. [转]关于 android 5.0 网络图标上的感叹号及其解决办法