首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

76.最小覆盖子串 Golang实现

编程知识
2024年09月23日 19:03

题目描述:

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
注意:
对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

题目分析:
看到这类最长最短子串等,则首选滑动窗口方法。按照滑动窗口的方法,重点应该是确定满足要求时窗口的状态: 这里是包含字符串t的所有元素就可以,不要求有序,那么使用哈希表来记录就是很好的办法,同时要求最短,即后续要优化,因为可能T的元素会在s中常重复出现,那么哈希表的值设置为频率就能很好达到——》元素出现,并且频率一次就是最短的状态。因为是字符,所以哈希表设计为 var targetFreq :=map[byte]int。 那么targetFreq的长度就代表了目标字符串的元素种类。

点击查看代码
func minWindow(s string, t string) string {
   if len(s)==0 || len(t)==0{return ""}
   left,right,matchCount:=0,0,0
   start:=0
   minLength := len(s)+1
   targetFreq := make(map[byte]int)
    for i := 0; i < len(t); i++ {
        targetFreq[t[i]]++
    }

    windowFreq := make(map[byte]int)

    for right<len(s){
        charRight := s[right]
        right++
        if _,exists:=targetFreq[charRight];exists{
            windowFreq[charRight]++
            if windowFreq[charRight] == targetFreq[charRight] {
                matchCount++
            }
        }
        for matchCount == len(targetFreq){
        //    尝试缩小边界
            if right-left <minLength{
                minLength = right-left
                start = left
            }
             charLeft:= s[left]
             left++
             if _,exists:=targetFreq[charLeft];exists{
                 if windowFreq[charLeft] == targetFreq[charLeft]{
                     matchCount--
                 }
                 windowFreq[charLeft]--
             }
        }
    }
    if minLength == len(s)+1{return ""}
    return s[start:start+minLength]
}
From:https://www.cnblogs.com/CharlseGo/p/18427783
本文地址: http://shuzixingkong.net/article/2241
0评论
提交 加载更多评论
其他文章 最好的文件管理器-dolphin
title: 最好的文件管理器-dolphin author: ivhu date: 2024-09-23 19:04:30 categories: - 计算机 - linux tags: - 文件管理器 description: WARN:windows没有,废话少说,直接开始 what&#39;
最好的文件管理器-dolphin 最好的文件管理器-dolphin 最好的文件管理器-dolphin
duxapp:基于Taro使用模块化开发,提升开发效率
duxapp是基于Taro二次开发的模块化框架 使用这个框架,结合框架提供的UI库和工具库,能帮助你快速且高质量的完成项目,且能实现同时开发小程序、H5、APP(React Native),并且保证各个端的一致性
duxapp:基于Taro使用模块化开发,提升开发效率
滑动窗口问题总结
适用范围 1、一般是字符串或者列表 2、一般是要求最值(最大长度,最短长度等等)或者子序列 算法思想 1、在序列中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个窗口。 2、先不断地增加 right 指针扩大窗口 [left,
优化 Go 语言数据打包:性能基准测试与分析
优化 Go 语言数据打包:性能基准测试与分析 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步。 改造方案:使用 Go 重写这个抓包逻辑及同步逻辑,直接将抓到的包通过网络发送至服务端,由服务端写入,这样
RDK X5首发上手体验!真的太帅啦!!!
RDK X5首发上手体验!真的太帅啦!!! 本Blog同步发表于以下平台: &#183;地瓜机器人开发者论坛:https://developer.d-robotics.cc/forumDetail/251934743552436286 &#183; CSDN:https://blog.csdn.ne
RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!!
比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛
本文主要介绍了“大唐杯”信息通信技术大赛的简介、比赛形式、备赛方向,并结合往年题目进行了分析和总结,对参与比赛的同学有一定帮助作用。
比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛 比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛 比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛
Python 项目配置管理框架技术选型
一、背景介绍 在实际生产项目中,不同环境(如开发、测试、生产环境)常有不同配置需求,如数据库链接等。我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 “一份代码,多处部署”的需求,以提升系统部署灵活性及配置管理能力。具体而言,支持“多环境配置”的配置管理框架(类库)应支持
密码学承诺原理与应用 - 概览
作者:@warm3snow https://github.com/warm3snow 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ 标签:技术分享模板 目录简介承诺方案原理符号定义方案定义常见承诺方案和原理哈希承诺ElGamal承
密码学承诺原理与应用 - 概览 密码学承诺原理与应用 - 概览 密码学承诺原理与应用 - 概览