0%

161. One Edit Distance

O(m+n) time O(1) space

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
bool isOneEditDistance(string s, string t) {
int m = s.length(), n = t.length();
if (m > n) {
swap(s, t);
swap(m, n);
}
if (n - m > 1) return false;
for (int i = 0; i < m; ++i) {
if (s[i] != t[i]) {
if (m < n) return s.substr(i) == t.substr(i + 1);
return s.substr(i + 1) == t.substr(i + 1);
}
}
return m + 1 == n;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
bool isOneEditDistance(string s, string t) {
int m = s.length(), n = t.length();
if (m > n) {
return isOneEditDistance(t, s);
}
if (n - m > 1) return false;
for (int i = 0; i < m; ++i) {
if (s[i] != t[i]) {
if (m < n) return s.substr(i) == t.substr(i + 1);
return s.substr(i + 1) == t.substr(i + 1);
}
}
return m + 1 == n;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
public:
bool isOneEditDistance(string s, string t) {
int m = s.length(), n = t.length();
if (m == n) {
int diff = 1;
for (int i = 0; i < n; ++i) {
if (s[i] != t[i]) {
if (diff == 1) {
diff = 0;
} else {
return false;
}
}
}
return diff == 0; // s和t都为空
}
if (m > n) {
s.swap(t);
swap(m, n);
}
if (n - m != 1) return false;
int diff = 1;
for (int i = 0, j = 0; i < m && j < n; ++i, ++j) {
if (s[i] != t[j]) {
if (diff == 1) {
--i;
diff = 0;
} else {
return false;
}
}
}
return true;
}
};