[LeetCode] 1100. Find K-Length Substrings With No Repeated Characters
Given a string s and an integer k, return the number of substrings in s of length k with no repeated characters.
Example 1:
Input: s = "havefunonleetcode", k = 5
Output: 6
Explanation: There are 6 substrings they are: 'havef','avefu','vefun','efuno','etcod','tcode'.
Example 2:
Input: s = "home", k = 5
Output: 0
Explanation: Notice k can be larger than the length of s. In this case, it is not possible to find any substring.
Constraints:
1 <= s.length <= 104
s consists of lowercase English letters.
1 <= k <= 104
长度为 K 的无重复字符子串。
思路
滑动窗口。
复杂度
时间O(n)
空间O(n)
代码
滑动窗口模板实现
class Solution { public int numKLenSubstrNoRepeats(String s, int k) { // corner case int len = s.length(); if (len < k) { return 0; } // normal case int start = 0; int end = 0; int res = 0; HashSet<Character> set = new HashSet<>(); while (end < len) { while (set.contains(s.charAt(end))) { set.remove(s.charAt(start)); start++; } set.add(s.charAt(end)); end++; if (end - start == k) { res++; set.remove(s.charAt(start)); start++; } } return res; } }
固定窗口模板实现
class Solution { public int numKLenSubstrNoRepeats(String s, int k) { int n = s.length(); // corner case if (s.length() < k) { return 0; } // normal case int res = 0; HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < k; i++) { char c = s.charAt(i); map.put(c, map.getOrDefault(c, 0) + 1); } if (map.size() == k) { res++; } for (int i = k; i < n; i++) { char c1 = s.charAt(i); char c2 = s.charAt(i - k); map.put(c2, map.get(c2) - 1); if (map.get(c2) == 0) { map.remove(c2); } map.put(c1, map.getOrDefault(c1, 0) + 1); if (map.size() == k) { res++; } } return res; } } // sliding window with fixed size
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)