Skip to content

Commit b426afb

Browse files
committed
feat: add solutions to lc problem: No.1638
No.1638.Count Substrings That Differ by One Character
1 parent 21b82a7 commit b426afb

File tree

5 files changed

+82
-76
lines changed

5 files changed

+82
-76
lines changed

solution/1600-1699/1638.Count Substrings That Differ by One Character/README.md

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474

7575
枚举不同的那个字符,然后向两边扩展。
7676

77-
时间复杂度 $O(m \times n \times min(m, n))$
77+
时间复杂度 $O(m \times n \times min(m, n))$,空间复杂度 $O(1)$。其中 $m$ 和 $n$ 分别是字符串 $s$ 和 $t$ 的长度
7878

7979
<!-- tabs:start -->
8080

@@ -85,15 +85,14 @@
8585
```python
8686
class Solution:
8787
def countSubstrings(self, s: str, t: str) -> int:
88-
m, n = len(s), len(t)
8988
ans = 0
90-
for i in range(m):
91-
for j in range(n):
92-
if s[i] != t[j]:
89+
for i, a in enumerate(s):
90+
for j, b in enumerate(t):
91+
if a != b:
9392
l = r = 1
94-
while i - l >= 0 and j - l >= 0 and s[i - l] == t[j - l]:
93+
while i >= l and j >= l and s[i - l] == t[j - l]:
9594
l += 1
96-
while i + r < m and j + r < n and s[i + r] == t[j + r]:
95+
while i + r < len(s) and j + r < len(t) and s[i + r] == t[j + r]:
9796
r += 1
9897
ans += l * r
9998
return ans
@@ -137,10 +136,16 @@ public:
137136
int ans = 0;
138137
for (int i = 0; i < m; ++i) {
139138
for (int j = 0; j < n; ++j) {
140-
if (s[i] == t[j]) continue;
139+
if (s[i] == t[j]) {
140+
continue;
141+
}
141142
int l = 1, r = 1;
142-
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) ++l;
143-
while (i + r < m && j + r < n && s[i + r] == t[j + r]) ++r;
143+
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) {
144+
++l;
145+
}
146+
while (i + r < m && j + r < n && s[i + r] == t[j + r]) {
147+
++r;
148+
}
144149
ans += l * r;
145150
}
146151
}
@@ -152,25 +157,22 @@ public:
152157
### **Go**
153158
154159
```go
155-
func countSubstrings(s string, t string) int {
156-
m, n := len(s), len(t)
157-
ans := 0
158-
for i := range s {
159-
for j := range t {
160-
if s[i] == t[j] {
161-
continue
162-
}
163-
l, r := 1, 1
164-
for i-l >= 0 && j-l >= 0 && s[i-l] == t[j-l] {
165-
l++
166-
}
167-
for i+r < m && j+r < n && s[i+r] == t[j+r] {
168-
r++
160+
func countSubstrings(s string, t string) (ans int) {
161+
for i, a := range s {
162+
for j, b := range t {
163+
if a != b {
164+
l, r := 1, 1
165+
for i >= l && j >= l && s[i-l] == t[j-l] {
166+
l++
167+
}
168+
for i+r < len(s) && j+r < len(t) && s[i+r] == t[j+r] {
169+
r++
170+
}
171+
ans += l * r
169172
}
170-
ans += l * r
171173
}
172174
}
173-
return ans
175+
return
174176
}
175177
```
176178

solution/1600-1699/1638.Count Substrings That Differ by One Character/README_EN.md

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,14 @@ The underlined portions are the substrings that are chosen from s and t.
5757
```python
5858
class Solution:
5959
def countSubstrings(self, s: str, t: str) -> int:
60-
m, n = len(s), len(t)
6160
ans = 0
62-
for i in range(m):
63-
for j in range(n):
64-
if s[i] != t[j]:
61+
for i, a in enumerate(s):
62+
for j, b in enumerate(t):
63+
if a != b:
6564
l = r = 1
66-
while i - l >= 0 and j - l >= 0 and s[i - l] == t[j - l]:
65+
while i >= l and j >= l and s[i - l] == t[j - l]:
6766
l += 1
68-
while i + r < m and j + r < n and s[i + r] == t[j + r]:
67+
while i + r < len(s) and j + r < len(t) and s[i + r] == t[j + r]:
6968
r += 1
7069
ans += l * r
7170
return ans
@@ -107,10 +106,16 @@ public:
107106
int ans = 0;
108107
for (int i = 0; i < m; ++i) {
109108
for (int j = 0; j < n; ++j) {
110-
if (s[i] == t[j]) continue;
109+
if (s[i] == t[j]) {
110+
continue;
111+
}
111112
int l = 1, r = 1;
112-
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) ++l;
113-
while (i + r < m && j + r < n && s[i + r] == t[j + r]) ++r;
113+
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) {
114+
++l;
115+
}
116+
while (i + r < m && j + r < n && s[i + r] == t[j + r]) {
117+
++r;
118+
}
114119
ans += l * r;
115120
}
116121
}
@@ -122,25 +127,22 @@ public:
122127
### **Go**
123128
124129
```go
125-
func countSubstrings(s string, t string) int {
126-
m, n := len(s), len(t)
127-
ans := 0
128-
for i := range s {
129-
for j := range t {
130-
if s[i] == t[j] {
131-
continue
132-
}
133-
l, r := 1, 1
134-
for i-l >= 0 && j-l >= 0 && s[i-l] == t[j-l] {
135-
l++
136-
}
137-
for i+r < m && j+r < n && s[i+r] == t[j+r] {
138-
r++
130+
func countSubstrings(s string, t string) (ans int) {
131+
for i, a := range s {
132+
for j, b := range t {
133+
if a != b {
134+
l, r := 1, 1
135+
for i >= l && j >= l && s[i-l] == t[j-l] {
136+
l++
137+
}
138+
for i+r < len(s) && j+r < len(t) && s[i+r] == t[j+r] {
139+
r++
140+
}
141+
ans += l * r
139142
}
140-
ans += l * r
141143
}
142144
}
143-
return ans
145+
return
144146
}
145147
```
146148

solution/1600-1699/1638.Count Substrings That Differ by One Character/Solution.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ class Solution {
55
int ans = 0;
66
for (int i = 0; i < m; ++i) {
77
for (int j = 0; j < n; ++j) {
8-
if (s[i] == t[j]) continue;
8+
if (s[i] == t[j]) {
9+
continue;
10+
}
911
int l = 1, r = 1;
10-
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) ++l;
11-
while (i + r < m && j + r < n && s[i + r] == t[j + r]) ++r;
12+
while (i - l >= 0 && j - l >= 0 && s[i - l] == t[j - l]) {
13+
++l;
14+
}
15+
while (i + r < m && j + r < n && s[i + r] == t[j + r]) {
16+
++r;
17+
}
1218
ans += l * r;
1319
}
1420
}
Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
func countSubstrings(s string, t string) int {
2-
m, n := len(s), len(t)
3-
ans := 0
4-
for i := range s {
5-
for j := range t {
6-
if s[i] == t[j] {
7-
continue
1+
func countSubstrings(s string, t string) (ans int) {
2+
for i, a := range s {
3+
for j, b := range t {
4+
if a != b {
5+
l, r := 1, 1
6+
for i >= l && j >= l && s[i-l] == t[j-l] {
7+
l++
8+
}
9+
for i+r < len(s) && j+r < len(t) && s[i+r] == t[j+r] {
10+
r++
11+
}
12+
ans += l * r
813
}
9-
l, r := 1, 1
10-
for i-l >= 0 && j-l >= 0 && s[i-l] == t[j-l] {
11-
l++
12-
}
13-
for i+r < m && j+r < n && s[i+r] == t[j+r] {
14-
r++
15-
}
16-
ans += l * r
1714
}
1815
}
19-
return ans
16+
return
2017
}
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
class Solution:
22
def countSubstrings(self, s: str, t: str) -> int:
3-
m, n = len(s), len(t)
43
ans = 0
5-
for i in range(m):
6-
for j in range(n):
7-
if s[i] != t[j]:
4+
for i, a in enumerate(s):
5+
for j, b in enumerate(t):
6+
if a != b:
87
l = r = 1
9-
while i - l >= 0 and j - l >= 0 and s[i - l] == t[j - l]:
8+
while i >= l and j >= l and s[i - l] == t[j - l]:
109
l += 1
11-
while i + r < m and j + r < n and s[i + r] == t[j + r]:
10+
while i + r < len(s) and j + r < len(t) and s[i + r] == t[j + r]:
1211
r += 1
1312
ans += l * r
1413
return ans

0 commit comments

Comments
 (0)