Skip to content

Commit c08eebf

Browse files
authored
Update Buddy Strings.java
1 parent 543d427 commit c08eebf

File tree

1 file changed

+25
-33
lines changed

1 file changed

+25
-33
lines changed

Easy/Buddy Strings.java

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,36 @@
11
class Solution {
2-
public boolean buddyStrings(String A, String B) {
3-
if (A.length() != B.length()) {
2+
public boolean buddyStrings(String s, String goal) {
3+
if (s.length() != goal.length()) {
44
return false;
55
}
6-
char requiredChar = '-';
7-
char mismatchChar = '-';
8-
int[] counter = new int[26];
9-
for (int i = 0; i < A.length(); i++) {
10-
if (A.charAt(i) != B.charAt(i)) {
11-
// Already done one swap hence cannot do any more swaps
12-
if (requiredChar == '_') {
13-
return false;
6+
if (s.equals(goal)) {
7+
Set<Character> set = new HashSet<>();
8+
for (char c : s.toCharArray()) {
9+
if (set.contains(c)) {
10+
return true;
1411
}
15-
if (requiredChar == '-') {
16-
requiredChar = B.charAt(i);
17-
mismatchChar = A.charAt(i);
12+
set.add(c);
13+
}
14+
return false;
15+
}
16+
char[] mismatch = {'-', '-'};
17+
for (int i = 0; i < s.length(); i++) {
18+
if (s.charAt(i) != goal.charAt(i)) {
19+
if (mismatch[0] == '|') {
20+
return false;
1821
}
19-
else {
20-
// Check if swap is possible from previous mismatch
21-
if (B.charAt(i) == mismatchChar && A.charAt(i) == requiredChar) {
22-
requiredChar = '_';
23-
}
24-
else {
25-
return false;
22+
if (mismatch[0] == '-') {
23+
mismatch[0] = s.charAt(i);
24+
mismatch[1] = goal.charAt(i);
25+
} else {
26+
if (goal.charAt(i) == mismatch[0] && s.charAt(i) == mismatch[1]) {
27+
mismatch[0] = '|';
28+
continue;
2629
}
30+
return false;
2731
}
2832
}
29-
else {
30-
counter[A.charAt(i) - 'a']++;
31-
}
32-
}
33-
if (mismatchChar != '-') {
34-
return requiredChar == '_';
35-
}
36-
// Check if we have more than 1 occurrence of same characters. We can swap them to fulfil the condition
37-
for (int i = 0; i < 26; i++) {
38-
if (counter[i] > 1) {
39-
return true;
40-
}
4133
}
42-
return false;
34+
return mismatch[0] == '|';
4335
}
4436
}

0 commit comments

Comments
 (0)