最小覆盖子串
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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本