File tree Expand file tree Collapse file tree 4 files changed +111
-39
lines changed
solution/1700-1799/1790.Check if One String Swap Can Make Strings Equal Expand file tree Collapse file tree 4 files changed +111
-39
lines changed Original file line number Diff line number Diff line change @@ -149,6 +149,35 @@ func areAlmostEqual(s1 string, s2 string) bool {
149
149
}
150
150
```
151
151
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
+
152
181
### **TypeScript**
153
182
154
183
```ts
@@ -175,23 +204,20 @@ function areAlmostEqual(s1: string, s2: string): boolean {
175
204
``` rust
176
205
impl Solution {
177
206
pub fn are_almost_equal (s1 : String , s2 : String ) -> bool {
207
+ if s1 == s2 {
208
+ return true ;
209
+ }
178
210
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 );
188
215
}
189
216
}
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 ;
193
219
}
194
- size != 1
220
+ s1 [ idxs [ 0 ]] == s2 [ idxs [ 1 ]] && s2 [ idxs [ 0 ]] == s1 [ idxs [ 1 ]]
195
221
}
196
222
}
197
223
```
Original file line number Diff line number Diff line change @@ -126,6 +126,35 @@ func areAlmostEqual(s1 string, s2 string) bool {
126
126
}
127
127
```
128
128
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
+
129
158
### **TypeScript**
130
159
131
160
```ts
@@ -152,23 +181,20 @@ function areAlmostEqual(s1: string, s2: string): boolean {
152
181
``` rust
153
182
impl Solution {
154
183
pub fn are_almost_equal (s1 : String , s2 : String ) -> bool {
184
+ if s1 == s2 {
185
+ return true ;
186
+ }
155
187
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 );
165
192
}
166
193
}
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 ;
170
196
}
171
- size != 1
197
+ s1 [ idxs [ 0 ]] == s2 [ idxs [ 1 ]] && s2 [ idxs [ 0 ]] == s1 [ idxs [ 1 ]]
172
198
}
173
199
}
174
200
```
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change 1
1
impl Solution {
2
2
pub fn are_almost_equal ( s1 : String , s2 : String ) -> bool {
3
+ if s1 == s2 {
4
+ return true ;
5
+ }
3
6
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) ;
13
11
}
14
12
}
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 ;
18
15
}
19
- size != 1
16
+ s1 [ idxs [ 0 ] ] == s2 [ idxs [ 1 ] ] && s2 [ idxs [ 0 ] ] == s1 [ idxs [ 1 ] ]
20
17
}
21
18
}
You can’t perform that action at this time.
0 commit comments