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

Q13 LeetCode76 最小覆盖子串

时间:2024-06-07 23:23:02浏览次数:27  
标签:子串 right LeetCode76 get minLen window Q13 need left

1.难题

2.need.containsKey(r) 看hashmap中是否含有r

3.明天再复盘一遍

 

 

 1 class Solution {
 2     public String minWindow(String s, String t) {
 3         if (s == null || s.isEmpty() || t == null || t.isEmpty() || s.length() < t.length()) return "";
 4 
 5         Map<Character, Integer> need = new HashMap<>();
 6         Map<Character, Integer> window = new HashMap<>();
 7 
 8         // 初始化 need,记录 t 中每个字符的出现次数
 9         for (char c : t.toCharArray()) need.put(c, need.getOrDefault(c, 0) + 1);
10 
11         int left = 0, right = 0; // 窗口的左右边界
12         int valid = 0; // 已经匹配上的字符数量
13         int start = 0, minLen = Integer.MAX_VALUE; // 最小窗口的起始位置和长度
14 
15         while (right < s.length()) {
16             char r = s.charAt(right);
17             right++;
18 
19             // 更新窗口内字符的计数
20             if (need.containsKey(r)) {
21                 window.put(r, window.getOrDefault(r, 0) + 1);
22                 if (window.get(r).equals(need.get(r))) valid++;
23             }
24 
25             // 当窗口内的字符已经完全包含了 t 中的所有字符时
26             while (valid == need.size()) {
27                 // 更新最小窗口的起始位置和长度
28                 if (right - left < minLen) {
29                     start = left;
30                     minLen = right - left;
31                 }
32 
33                 char l = s.charAt(left);
34                 // 缩小窗口,移动左边界
35                 if (need.containsKey(l)) {
36                     window.put(l, window.get(l) - 1);
37                     if (window.get(l) < need.get(l)) valid--;
38                 }
39                 left++;
40             }
41         }
42         return minLen == Integer.MAX_VALUE ? "" : s.substring(start, start + minLen);
43     }
44 }

 

标签:子串,right,LeetCode76,get,minLen,window,Q13,need,left
From: https://www.cnblogs.com/cff1/p/18238030

相关文章

  • 算法题-无重复字符的最长子串
    学习目标:无重复字符的最长子串leetcode原题链接学习内容:给定一个字符串s,请你找出其中不含有重复字符的最长连续子字符串的长度。示例1:输入:s=“abcabcbb”输出:3解释:因为无重复字符的最长子字符串是“abc”,所以其长度为3。示例2:输入:s=“......
  • 2道寻找回文子串的题目
    题目题目1题目2题目1是将字符串分隔,使得分隔后得到的每个字符串都是回文子串题目2是从字符串里面找到回文子串两道题都可以利用递归来解决//利用双指针判断是否是回文子串boolisre(string&s){ intleft=0; intright-s.size()-1; while(left<=right) {......
  • 最小覆盖子串
    Problem:76.最小覆盖子串目录思路解题方法复杂度Code思路滑动窗口很简单解题方法滑动窗口复杂度时间复杂度:添加时间复杂度,示例:$O(n)$空间复杂度:添加空间复杂度,示例:$O(n)$CodefuncminWindow(sstring,tstring)string{ result:="" //剔......
  • 力扣第五题 5.最长回文子串
    目录问题解题思路动态规划中心扩展官方解法1.动态规划2.中心扩展算法3.Manacher 算法问题解题思路我们的回文子串有两种情况,一种是左与右相同,一种是左与右+1的位置所以我们就可以根据这个条件判断是否为子串,然后再扩大判断。还可以使用中心扩展的方式,就判断左......
  • 1638. 统计只差一个字符的子串数目
    题目给你两个字符串s和t,请找出s中的非空子串的数目,这些子串满足替换一个不同字符以后,是t串的子串。换言之,请你找到s和t串中恰好只有一个字符不同的子字符串对的数目。一个子字符串是一个字符串中连续的字符。示例示例1输入:s="aba",t="baba"输出:6......
  • 3. 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串  的长度。  示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其......
  • 力扣:5. 最长回文子串
    5.最长回文子串给你一个字符串 s,找到 s 中最长的 回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s 仅由数字和英文字母组成classSolution{publicStringlonges......
  • 5. 最长回文子串
    给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:-1<=s.length<=1000-s仅由数字和英文字母组成......
  • 3.无重复字符的最长子串
    给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例3:输......
  • 【LeetCode】【5】最长回文子串
    文章目录@[toc]题目描述样例输入输出与解释样例1样例2提示Python实现动态规划个人主页:丷从心·系列专栏:LeetCode刷题指南:LeetCode刷题指南题目描述给一个字符串s,找到s中最长的回文子串样例输入输出与解释样例1输入:s="babad"输出:"bab"解释:"aba"同样是......