首页 > 其他分享 >最小覆盖子串

最小覆盖子串

时间:2024-06-06 15:22:07浏览次数:23  
标签:子串 覆盖 ++ 复杂度 最小 len startIndex result tArray

Problem: 76. 最小覆盖子串

目录

思路

滑动窗口 很简单

解题方法

滑动窗口

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

func minWindow(s string, t string) string {
	result := ""
	// 剔除错误答案
	if len(t) == 0 {
		return result
	}
	if len(t) > len(s) {
		return result
	}

	// 用于比较的数组
	tArray, resultArray := ['z' - 'A' + 1]int{}, ['z' - 'A' + 1]int{}
	// 记录开始与结尾区间
	startIndex, endIndex := 0, 0
	// 初始化t数组和tMinIndex
	for _, char := range t {
		tArray[char-'A']++
	}

	// 开始循环
	for _, char := range s {
		// endIndex++
		endIndex++
		// 先判断当前字符是否在t中, 如果存在则++
		if tArray[char-'A'] > 0 {
			resultArray[char-'A']++
			// 现在多了一个字符了, 来判断一下是否满足子串吧
			for i := 0; i < len(tArray); i++ {
				if resultArray[i] < tArray[i] {
					break
				}
				if resultArray[i] >= tArray[i] && i == len(tArray)-1 {
					// 将没用的非有效部分直接去掉
					for tArray[s[startIndex]-'A'] == 0 {
						startIndex++
					}
					// 再尝试缩小数据范围
					for tArray[s[startIndex]-'A'] == 0 || resultArray[s[startIndex]-'A'] > tArray[s[startIndex]-'A'] {
						if tArray[s[startIndex]-'A'] != 0 {
							resultArray[s[startIndex]-'A']--
						}
						startIndex++
					}

					// 判断成功 保存result
					if len(result) == 0 || len(result) > endIndex-startIndex {
						result = s[startIndex:endIndex]
					}

				}
			}
		}
	}
	return result
}

标签:子串,覆盖,++,复杂度,最小,len,startIndex,result,tArray
From: https://www.cnblogs.com/sunchenxuan/p/18235206

相关文章

  • js的 addEventListener如果添加的是相同名称的事件,会被覆盖吗
    在JavaScript中,使用addEventListener方法向元素添加事件监听器时,如果有多个相同的事件名称(比如多次调用addEventListener("click",function)),这些监听器不会互相覆盖,而是会累加。这意味着所有为同一事件类型注册的监听器都会按照添加的顺序依次触发,而不是只有最后一个生效。这......
  • C语言Kruskal算法求最小生成树
    Kruskal算法求出最小生成树。图形算法描述先找最小权值边为1的边有(V1,V4),(V2,V9),保证不产生回路就可以成功选择边除去上一次找的边后,在找权值最小的边为2的有(V2,V3),(V4,V3),(V5,V6),(V9,V8),连接不产生回路的边除去之前找过的边,后面再看权值最小的边为3的边有(V1,V3),(V7,V8),(V9,V7)按顺......
  • 已知一组数字:21,25,11,32,12,35,55,77,66,要求按以下规则进行排序.第一个数最大,第二个数最小,第三个数字是剩下中的最
    importjava.util.Arrays;importjava.util.ArrayList;importjava.util.Collections;publicclassTest_A19{publicstaticvoidmain(String[]args){Integer[]numbers={21,25,11,32,12,35,55,77,66};Arrays.sort(numbers,Collect......
  • ### Python 列表操作详解:从创建、增删到高级技巧全覆盖
    1.创建列表使用list函数创建空列表:empty_list=list()print(empty_list)#输出:[]从字符串创建列表:string="hello"list_from_string=list(string)print(list_from_string)#输出:['h','e','l','l','o']......
  • 最小二乘法算法(个人总结版)
    最小二乘法(LeastSquaresMethod)是一种通过最小化误差平方和来拟合数据的回归分析方法。它被广泛应用于线性回归、多元回归以及其他数据拟合问题中。以下是详细的教程,涵盖基本概念、数学推导、具体步骤和实现代码。1.最小二乘法基本概念最小二乘法是一种用于数据拟合的统计......
  • 【无人机】基于一组配备图像传感器的无人驾驶飞行器(UAV)对地面区域进行最小时间覆盖问
     ......
  • 力扣第五题 5.最长回文子串
    目录问题解题思路动态规划中心扩展官方解法1.动态规划2.中心扩展算法3.Manacher 算法问题解题思路我们的回文子串有两种情况,一种是左与右相同,一种是左与右+1的位置所以我们就可以根据这个条件判断是否为子串,然后再扩大判断。还可以使用中心扩展的方式,就判断左......
  • 1638. 统计只差一个字符的子串数目
    题目给你两个字符串s和t,请找出s中的非空子串的数目,这些子串满足替换一个不同字符以后,是t串的子串。换言之,请你找到s和t串中恰好只有一个字符不同的子字符串对的数目。一个子字符串是一个字符串中连续的字符。示例示例1输入:s="aba",t="baba"输出:6......
  • jacoco覆盖率多版本exec合并
    @目录概要概要所有代码已经上传到gitee,仓库地址:https://gitee.com/chen_zai_xing/jacoco。方法指令合并参考ray大佬的https://blog.csdn.net/tushuping/article/details/131640959?spm=1001.2014.3001.5502,大佬在文中未提及指令签名带上指令相对于方法中的序号,这里补充说明下。......
  • C语言Prim算法和Prim-Alternat找最小生成树
    文章目录1、用prim算法求最小生成树C语言Prim算法实现2、用Prim-Alternate算法求最小生成树3、C语言Prim-Alternate算法实现1、用prim算法求最小生成树绿色线会标记选过的边从v1当作起始点开始,可选择:(v1,v2)权值为6(v1,v3)权值为3(v1,v4)权值为1从中选择边(v1,v......