Skip to content

Commit 2ec8521

Browse files
committed
feat: add solution to lc problem: No.1100
No.1100. Find K-Length Substrings With No Repeated Characters
1 parent d1eed2a commit 2ec8521

File tree

4 files changed

+262
-0
lines changed

4 files changed

+262
-0
lines changed

solution/1100-1199/1100.Find K-Length Substrings With No Repeated Characters/README.md

+119
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,23 @@ class Solution:
7474
return ans
7575
```
7676

77+
```python
78+
class Solution:
79+
def numKLenSubstrNoRepeats(self, s: str, k: int) -> int:
80+
n = len(s)
81+
if k > n:
82+
return 0
83+
cnt = Counter(s[:k])
84+
ans = int(len(cnt) == k)
85+
for i in range(k, n):
86+
cnt[s[i]] += 1
87+
cnt[s[i - k]] -= 1
88+
if cnt[s[i - k]] == 0:
89+
cnt.pop(s[i - k])
90+
ans += len(cnt) == k
91+
return ans
92+
```
93+
7794
### **Java**
7895

7996
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -99,6 +116,30 @@ class Solution {
99116
}
100117
```
101118

119+
```java
120+
class Solution {
121+
public int numKLenSubstrNoRepeats(String s, int k) {
122+
int n = s.length();
123+
if (k > n) {
124+
return 0;
125+
}
126+
Map<Character, Integer> cnt = new HashMap<>(k);
127+
for (int i = 0; i < k; ++i) {
128+
cnt.merge(s.charAt(i), 1, Integer::sum);
129+
}
130+
int ans = cnt.size() == k ? 1 : 0;
131+
for (int i = k; i < n; ++i) {
132+
cnt.merge(s.charAt(i), 1, Integer::sum);
133+
if (cnt.merge(s.charAt(i - k), -1, Integer::sum) == 0) {
134+
cnt.remove(s.charAt(i - k));
135+
}
136+
ans += cnt.size() == k ? 1 : 0;
137+
}
138+
return ans;
139+
}
140+
}
141+
```
142+
102143
### **C++**
103144

104145
```cpp
@@ -123,6 +164,32 @@ public:
123164
};
124165
```
125166
167+
```cpp
168+
class Solution {
169+
public:
170+
int numKLenSubstrNoRepeats(string s, int k) {
171+
int n = s.size();
172+
if (k > n) {
173+
return 0;
174+
}
175+
unordered_map<char, int> cnt;
176+
for (int i = 0; i < k; ++i) {
177+
cnt[s[i]]++;
178+
}
179+
int ans = cnt.size() == k ? 1 : 0;
180+
for (int i = k; i < n; ++i) {
181+
cnt[s[i]]++;
182+
cnt[s[i - k]]--;
183+
if (cnt[s[i - k]] == 0) {
184+
cnt.erase(s[i - k]);
185+
}
186+
ans += cnt.size() == k ? 1 : 0;
187+
}
188+
return ans;
189+
}
190+
};
191+
```
192+
126193
### **Go**
127194

128195
```go
@@ -145,6 +212,58 @@ func numKLenSubstrNoRepeats(s string, k int) (ans int) {
145212
}
146213
```
147214

215+
```go
216+
func numKLenSubstrNoRepeats(s string, k int) (ans int) {
217+
n := len(s)
218+
if k > n {
219+
return 0
220+
}
221+
cnt := map[byte]int{}
222+
for i := 0; i < k; i++ {
223+
cnt[s[i]]++
224+
}
225+
if len(cnt) == k {
226+
ans++
227+
}
228+
for i := k; i < n; i++ {
229+
cnt[s[i]]++
230+
cnt[s[i-k]]--
231+
if cnt[s[i-k]] == 0 {
232+
delete(cnt, s[i-k])
233+
}
234+
if len(cnt) == k {
235+
ans++
236+
}
237+
}
238+
return
239+
}
240+
```
241+
242+
### **TypeScript**
243+
244+
```ts
245+
function numKLenSubstrNoRepeats(s: string, k: number): number {
246+
const n = s.length;
247+
if (k > n) {
248+
return 0;
249+
}
250+
const cnt: Map<string, number> = new Map();
251+
for (let i = 0; i < k; ++i) {
252+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
253+
}
254+
let ans = cnt.size === k ? 1 : 0;
255+
for (let i = k; i < n; ++i) {
256+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
257+
cnt.set(s[i - k], (cnt.get(s[i - k]) ?? 0) - 1);
258+
if (cnt.get(s[i - k]) === 0) {
259+
cnt.delete(s[i - k]);
260+
}
261+
ans += cnt.size === k ? 1 : 0;
262+
}
263+
return ans;
264+
}
265+
```
266+
148267
### **...**
149268

150269
```

solution/1100-1199/1100.Find K-Length Substrings With No Repeated Characters/README_EN.md

+119
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,23 @@ class Solution:
5555
return ans
5656
```
5757

58+
```python
59+
class Solution:
60+
def numKLenSubstrNoRepeats(self, s: str, k: int) -> int:
61+
n = len(s)
62+
if k > n:
63+
return 0
64+
cnt = Counter(s[:k])
65+
ans = int(len(cnt) == k)
66+
for i in range(k, n):
67+
cnt[s[i]] += 1
68+
cnt[s[i - k]] -= 1
69+
if cnt[s[i - k]] == 0:
70+
cnt.pop(s[i - k])
71+
ans += len(cnt) == k
72+
return ans
73+
```
74+
5875
### **Java**
5976

6077
```java
@@ -78,6 +95,30 @@ class Solution {
7895
}
7996
```
8097

98+
```java
99+
class Solution {
100+
public int numKLenSubstrNoRepeats(String s, int k) {
101+
int n = s.length();
102+
if (k > n) {
103+
return 0;
104+
}
105+
Map<Character, Integer> cnt = new HashMap<>(k);
106+
for (int i = 0; i < k; ++i) {
107+
cnt.merge(s.charAt(i), 1, Integer::sum);
108+
}
109+
int ans = cnt.size() == k ? 1 : 0;
110+
for (int i = k; i < n; ++i) {
111+
cnt.merge(s.charAt(i), 1, Integer::sum);
112+
if (cnt.merge(s.charAt(i - k), -1, Integer::sum) == 0) {
113+
cnt.remove(s.charAt(i - k));
114+
}
115+
ans += cnt.size() == k ? 1 : 0;
116+
}
117+
return ans;
118+
}
119+
}
120+
```
121+
81122
### **C++**
82123

83124
```cpp
@@ -102,6 +143,32 @@ public:
102143
};
103144
```
104145
146+
```cpp
147+
class Solution {
148+
public:
149+
int numKLenSubstrNoRepeats(string s, int k) {
150+
int n = s.size();
151+
if (k > n) {
152+
return 0;
153+
}
154+
unordered_map<char, int> cnt;
155+
for (int i = 0; i < k; ++i) {
156+
cnt[s[i]]++;
157+
}
158+
int ans = cnt.size() == k ? 1 : 0;
159+
for (int i = k; i < n; ++i) {
160+
cnt[s[i]]++;
161+
cnt[s[i - k]]--;
162+
if (cnt[s[i - k]] == 0) {
163+
cnt.erase(s[i - k]);
164+
}
165+
ans += cnt.size() == k ? 1 : 0;
166+
}
167+
return ans;
168+
}
169+
};
170+
```
171+
105172
### **Go**
106173

107174
```go
@@ -124,6 +191,58 @@ func numKLenSubstrNoRepeats(s string, k int) (ans int) {
124191
}
125192
```
126193

194+
```go
195+
func numKLenSubstrNoRepeats(s string, k int) (ans int) {
196+
n := len(s)
197+
if k > n {
198+
return 0
199+
}
200+
cnt := map[byte]int{}
201+
for i := 0; i < k; i++ {
202+
cnt[s[i]]++
203+
}
204+
if len(cnt) == k {
205+
ans++
206+
}
207+
for i := k; i < n; i++ {
208+
cnt[s[i]]++
209+
cnt[s[i-k]]--
210+
if cnt[s[i-k]] == 0 {
211+
delete(cnt, s[i-k])
212+
}
213+
if len(cnt) == k {
214+
ans++
215+
}
216+
}
217+
return
218+
}
219+
```
220+
221+
### **TypeScript**
222+
223+
```ts
224+
function numKLenSubstrNoRepeats(s: string, k: number): number {
225+
const n = s.length;
226+
if (k > n) {
227+
return 0;
228+
}
229+
const cnt: Map<string, number> = new Map();
230+
for (let i = 0; i < k; ++i) {
231+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
232+
}
233+
let ans = cnt.size === k ? 1 : 0;
234+
for (let i = k; i < n; ++i) {
235+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
236+
cnt.set(s[i - k], (cnt.get(s[i - k]) ?? 0) - 1);
237+
if (cnt.get(s[i - k]) === 0) {
238+
cnt.delete(s[i - k]);
239+
}
240+
ans += cnt.size === k ? 1 : 0;
241+
}
242+
return ans;
243+
}
244+
```
245+
127246
### **...**
128247

129248
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function numKLenSubstrNoRepeats(s: string, k: number): number {
2+
const n = s.length;
3+
if (k > n) {
4+
return 0;
5+
}
6+
const cnt: Map<string, number> = new Map();
7+
for (let i = 0; i < k; ++i) {
8+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
9+
}
10+
let ans = cnt.size === k ? 1 : 0;
11+
for (let i = k; i < n; ++i) {
12+
cnt.set(s[i], (cnt.get(s[i]) ?? 0) + 1);
13+
cnt.set(s[i - k], (cnt.get(s[i - k]) ?? 0) - 1);
14+
if (cnt.get(s[i - k]) === 0) {
15+
cnt.delete(s[i - k]);
16+
}
17+
ans += cnt.size === k ? 1 : 0;
18+
}
19+
return ans;
20+
}

solution/1100-1199/1108.Defanging an IP Address/README.md

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838

3939
**方法一:直接替换**
4040

41+
我们直接将字符串中的 `'.'` 替换为 `'[.]'` 即可。
42+
43+
时间复杂度 $O(n)$,其中 $n$ 为字符串的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。
44+
4145
<!-- tabs:start -->
4246

4347
### **Python3**

0 commit comments

Comments
 (0)