Skip to content

Commit 2a77250

Browse files
committed
feat: add solutions to lc problem: No.0161
No.0161.One Edit Distance
1 parent e8b45a5 commit 2a77250

File tree

6 files changed

+225
-2
lines changed

6 files changed

+225
-2
lines changed

solution/0100-0199/0161.One Edit Distance/README.md

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,109 @@
4646

4747
<!-- 这里可写通用的实现逻辑 -->
4848

49+
**方法一:分情况讨论**
50+
51+
记 $m$ 表示字符串 $s$ 的长度,$n$ 表示字符串 $t$ 的长度。我们可以假定 $m$ 恒大于等于 $n$。
52+
53+
若 $m-n\gt1$,直接返回 false;
54+
55+
否则,遍历 $s$ 和 $t$,若遇到 $s[i]$ 不等于 $t[i]$:
56+
57+
- 若 $m \neq n$,比较 $s[i+1:]$ 与 $t[i:]$,相等返回 true,否则返回 false;
58+
- 若 $m = n$,比较 $s[i:]$ 与 $t[i:]$,相等返回 true,否则返回 false。
59+
60+
遍历结束,说明遍历过的 $s$ 跟 $t$ 所有字符相等,此时需要满足 $m=n+1$。
61+
62+
时间复杂度 $O(m)$,空间复杂度 $O(1)$。
63+
4964
<!-- tabs:start -->
5065

5166
### **Python3**
5267

5368
<!-- 这里可写当前语言的特殊实现逻辑 -->
5469

5570
```python
56-
71+
class Solution:
72+
def isOneEditDistance(self, s: str, t: str) -> bool:
73+
if len(s) < len(t):
74+
return self.isOneEditDistance(t, s)
75+
m, n = len(s), len(t)
76+
if m - n > 1:
77+
return False
78+
for i, c in enumerate(t):
79+
if c != s[i]:
80+
return s[i + 1:] == t[i + 1:] if m == n else s[i + 1:] == t[i:]
81+
return m == n + 1
5782
```
5883

5984
### **Java**
6085

6186
<!-- 这里可写当前语言的特殊实现逻辑 -->
6287

6388
```java
89+
class Solution {
90+
public boolean isOneEditDistance(String s, String t) {
91+
int m = s.length(), n = t.length();
92+
if (m < n) {
93+
return isOneEditDistance(t, s);
94+
}
95+
if (m - n > 1) {
96+
return false;
97+
}
98+
for (int i = 0; i < n; ++i) {
99+
if (s.charAt(i) != t.charAt(i)) {
100+
if (m == n) {
101+
return s.substring(i + 1).equals(t.substring(i + 1));
102+
}
103+
return s.substring(i + 1).equals(t.substring(i));
104+
}
105+
}
106+
return m == n + 1;
107+
}
108+
}
109+
```
110+
111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
bool isOneEditDistance(string s, string t) {
117+
int m = s.size(), n = t.size();
118+
if (m < n) return isOneEditDistance(t, s);
119+
if (m - n > 1) return false;
120+
for (int i = 0; i < n; ++i) {
121+
if (s[i] != t[i]) {
122+
if (m == n) return s.substr(i + 1) == t.substr(i + 1);
123+
return s.substr(i + 1) == t.substr(i);
124+
}
125+
}
126+
return m == n + 1;
127+
}
128+
};
129+
```
64130
131+
### **Go**
132+
133+
```go
134+
func isOneEditDistance(s string, t string) bool {
135+
m, n := len(s), len(t)
136+
if m < n {
137+
return isOneEditDistance(t, s)
138+
}
139+
if m-n > 1 {
140+
return false
141+
}
142+
for i := range t {
143+
if s[i] != t[i] {
144+
if m == n {
145+
return s[i+1:] == t[i+1:]
146+
}
147+
return s[i+1:] == t[i:]
148+
}
149+
}
150+
return m == n+1
151+
}
65152
```
66153

67154
### **...**

solution/0100-0199/0161.One Edit Distance/README_EN.md

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,85 @@
4646
### **Python3**
4747

4848
```python
49-
49+
class Solution:
50+
def isOneEditDistance(self, s: str, t: str) -> bool:
51+
if len(s) < len(t):
52+
return self.isOneEditDistance(t, s)
53+
m, n = len(s), len(t)
54+
if m - n > 1:
55+
return False
56+
for i, c in enumerate(t):
57+
if c != s[i]:
58+
return s[i + 1:] == t[i + 1:] if m == n else s[i + 1:] == t[i:]
59+
return m == n + 1
5060
```
5161

5262
### **Java**
5363

5464
```java
65+
class Solution {
66+
public boolean isOneEditDistance(String s, String t) {
67+
int m = s.length(), n = t.length();
68+
if (m < n) {
69+
return isOneEditDistance(t, s);
70+
}
71+
if (m - n > 1) {
72+
return false;
73+
}
74+
for (int i = 0; i < n; ++i) {
75+
if (s.charAt(i) != t.charAt(i)) {
76+
if (m == n) {
77+
return s.substring(i + 1).equals(t.substring(i + 1));
78+
}
79+
return s.substring(i + 1).equals(t.substring(i));
80+
}
81+
}
82+
return m == n + 1;
83+
}
84+
}
85+
```
86+
87+
### **C++**
88+
89+
```cpp
90+
class Solution {
91+
public:
92+
bool isOneEditDistance(string s, string t) {
93+
int m = s.size(), n = t.size();
94+
if (m < n) return isOneEditDistance(t, s);
95+
if (m - n > 1) return false;
96+
for (int i = 0; i < n; ++i) {
97+
if (s[i] != t[i]) {
98+
if (m == n) return s.substr(i + 1) == t.substr(i + 1);
99+
return s.substr(i + 1) == t.substr(i);
100+
}
101+
}
102+
return m == n + 1;
103+
}
104+
};
105+
```
55106
107+
### **Go**
108+
109+
```go
110+
func isOneEditDistance(s string, t string) bool {
111+
m, n := len(s), len(t)
112+
if m < n {
113+
return isOneEditDistance(t, s)
114+
}
115+
if m-n > 1 {
116+
return false
117+
}
118+
for i := range t {
119+
if s[i] != t[i] {
120+
if m == n {
121+
return s[i+1:] == t[i+1:]
122+
}
123+
return s[i+1:] == t[i:]
124+
}
125+
}
126+
return m == n+1
127+
}
56128
```
57129

58130
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool isOneEditDistance(string s, string t) {
4+
int m = s.size(), n = t.size();
5+
if (m < n) return isOneEditDistance(t, s);
6+
if (m - n > 1) return false;
7+
for (int i = 0; i < n; ++i) {
8+
if (s[i] != t[i]) {
9+
if (m == n) return s.substr(i + 1) == t.substr(i + 1);
10+
return s.substr(i + 1) == t.substr(i);
11+
}
12+
}
13+
return m == n + 1;
14+
}
15+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
func isOneEditDistance(s string, t string) bool {
2+
m, n := len(s), len(t)
3+
if m < n {
4+
return isOneEditDistance(t, s)
5+
}
6+
if m-n > 1 {
7+
return false
8+
}
9+
for i := range t {
10+
if s[i] != t[i] {
11+
if m == n {
12+
return s[i+1:] == t[i+1:]
13+
}
14+
return s[i+1:] == t[i:]
15+
}
16+
}
17+
return m == n+1
18+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public boolean isOneEditDistance(String s, String t) {
3+
int m = s.length(), n = t.length();
4+
if (m < n) {
5+
return isOneEditDistance(t, s);
6+
}
7+
if (m - n > 1) {
8+
return false;
9+
}
10+
for (int i = 0; i < n; ++i) {
11+
if (s.charAt(i) != t.charAt(i)) {
12+
if (m == n) {
13+
return s.substring(i + 1).equals(t.substring(i + 1));
14+
}
15+
return s.substring(i + 1).equals(t.substring(i));
16+
}
17+
}
18+
return m == n + 1;
19+
}
20+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def isOneEditDistance(self, s: str, t: str) -> bool:
3+
if len(s) < len(t):
4+
return self.isOneEditDistance(t, s)
5+
m, n = len(s), len(t)
6+
if m - n > 1:
7+
return False
8+
for i, c in enumerate(t):
9+
if c != s[i]:
10+
return s[i + 1:] == t[i + 1:] if m == n else s[i + 1:] == t[i:]
11+
return m == n + 1

0 commit comments

Comments
 (0)