Skip to content

Commit 3a8df2b

Browse files
committed
feat: add solutions to lc problem: No.1790
No.1790.Check if One String Swap Can Make Strings Equal
1 parent 2b668d1 commit 3a8df2b

File tree

4 files changed

+111
-39
lines changed

4 files changed

+111
-39
lines changed

solution/1700-1799/1790.Check if One String Swap Can Make Strings Equal/README.md

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,35 @@ func areAlmostEqual(s1 string, s2 string) bool {
149149
}
150150
```
151151

152+
### **C**
153+
154+
```c
155+
bool areAlmostEqual(char *s1, char *s2) {
156+
int n = strlen(s1);
157+
int i1 = -1;
158+
int i2 = -1;
159+
for (int i = 0; i < n; i++) {
160+
if (s1[i] != s2[i]) {
161+
if (i1 == -1) {
162+
i1 = i;
163+
} else if (i2 == -1) {
164+
i2 = i;
165+
} else {
166+
return 0;
167+
}
168+
}
169+
}
170+
if (i1 == -1 && i2 == -1) {
171+
return 1;
172+
}
173+
if (i1 == -1 || i2 == -1) {
174+
return 0;
175+
}
176+
return s1[i1] == s2[i2] && s1[i2] == s2[i1];
177+
}
178+
179+
```
180+
152181
### **TypeScript**
153182
154183
```ts
@@ -175,23 +204,20 @@ function areAlmostEqual(s1: string, s2: string): boolean {
175204
```rust
176205
impl Solution {
177206
pub fn are_almost_equal(s1: String, s2: String) -> bool {
207+
if s1 == s2 {
208+
return true;
209+
}
178210
let (s1, s2) = (s1.as_bytes(), s2.as_bytes());
179-
let n = s1.len();
180-
let mut indexs = vec![];
181-
for i in 0..n {
182-
let (c1, c2) = (s1[i], s2[i]);
183-
if c1 != c2 {
184-
indexs.push(i);
185-
if indexs.len() > 2 {
186-
return false;
187-
}
211+
let mut idxs = vec![];
212+
for i in 0..s1.len() {
213+
if s1[i] != s2[i] {
214+
idxs.push(i);
188215
}
189216
}
190-
let size = indexs.len();
191-
if size == 2 {
192-
return s1[indexs[0]] == s2[indexs[1]] && s2[indexs[0]] == s1[indexs[1]];
217+
if idxs.len() != 2 {
218+
return false;
193219
}
194-
size != 1
220+
s1[idxs[0]] == s2[idxs[1]] && s2[idxs[0]] == s1[idxs[1]]
195221
}
196222
}
197223
```

solution/1700-1799/1790.Check if One String Swap Can Make Strings Equal/README_EN.md

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,35 @@ func areAlmostEqual(s1 string, s2 string) bool {
126126
}
127127
```
128128

129+
### **C**
130+
131+
```c
132+
bool areAlmostEqual(char *s1, char *s2) {
133+
int n = strlen(s1);
134+
int i1 = -1;
135+
int i2 = -1;
136+
for (int i = 0; i < n; i++) {
137+
if (s1[i] != s2[i]) {
138+
if (i1 == -1) {
139+
i1 = i;
140+
} else if (i2 == -1) {
141+
i2 = i;
142+
} else {
143+
return 0;
144+
}
145+
}
146+
}
147+
if (i1 == -1 && i2 == -1) {
148+
return 1;
149+
}
150+
if (i1 == -1 || i2 == -1) {
151+
return 0;
152+
}
153+
return s1[i1] == s2[i2] && s1[i2] == s2[i1];
154+
}
155+
156+
```
157+
129158
### **TypeScript**
130159
131160
```ts
@@ -152,23 +181,20 @@ function areAlmostEqual(s1: string, s2: string): boolean {
152181
```rust
153182
impl Solution {
154183
pub fn are_almost_equal(s1: String, s2: String) -> bool {
184+
if s1 == s2 {
185+
return true;
186+
}
155187
let (s1, s2) = (s1.as_bytes(), s2.as_bytes());
156-
let n = s1.len();
157-
let mut indexs = vec![];
158-
for i in 0..n {
159-
let (c1, c2) = (s1[i], s2[i]);
160-
if c1 != c2 {
161-
indexs.push(i);
162-
if indexs.len() > 2 {
163-
return false;
164-
}
188+
let mut idxs = vec![];
189+
for i in 0..s1.len() {
190+
if s1[i] != s2[i] {
191+
idxs.push(i);
165192
}
166193
}
167-
let size = indexs.len();
168-
if size == 2 {
169-
return s1[indexs[0]] == s2[indexs[1]] && s2[indexs[0]] == s1[indexs[1]];
194+
if idxs.len() != 2 {
195+
return false;
170196
}
171-
size != 1
197+
s1[idxs[0]] == s2[idxs[1]] && s2[idxs[0]] == s1[idxs[1]]
172198
}
173199
}
174200
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
bool areAlmostEqual(char *s1, char *s2) {
2+
int n = strlen(s1);
3+
int i1 = -1;
4+
int i2 = -1;
5+
for (int i = 0; i < n; i++) {
6+
if (s1[i] != s2[i]) {
7+
if (i1 == -1) {
8+
i1 = i;
9+
} else if (i2 == -1) {
10+
i2 = i;
11+
} else {
12+
return 0;
13+
}
14+
}
15+
}
16+
if (i1 == -1 && i2 == -1) {
17+
return 1;
18+
}
19+
if (i1 == -1 || i2 == -1) {
20+
return 0;
21+
}
22+
return s1[i1] == s2[i2] && s1[i2] == s2[i1];
23+
}
Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
impl Solution {
22
pub fn are_almost_equal(s1: String, s2: String) -> bool {
3+
if s1 == s2 {
4+
return true;
5+
}
36
let (s1, s2) = (s1.as_bytes(), s2.as_bytes());
4-
let n = s1.len();
5-
let mut indexs = vec![];
6-
for i in 0..n {
7-
let (c1, c2) = (s1[i], s2[i]);
8-
if c1 != c2 {
9-
indexs.push(i);
10-
if indexs.len() > 2 {
11-
return false;
12-
}
7+
let mut idxs = vec![];
8+
for i in 0..s1.len() {
9+
if s1[i] != s2[i] {
10+
idxs.push(i);
1311
}
1412
}
15-
let size = indexs.len();
16-
if size == 2 {
17-
return s1[indexs[0]] == s2[indexs[1]] && s2[indexs[0]] == s1[indexs[1]];
13+
if idxs.len() != 2 {
14+
return false;
1815
}
19-
size != 1
16+
s1[idxs[0]] == s2[idxs[1]] && s2[idxs[0]] == s1[idxs[1]]
2017
}
2118
}

0 commit comments

Comments
 (0)