Skip to content

Commit 9b8cad1

Browse files
committed
feat: add solutions to lc problem: No.0859
No.0859.Buddy Strings
1 parent 9f6692c commit 9b8cad1

File tree

6 files changed

+282
-4
lines changed

6 files changed

+282
-4
lines changed

solution/0800-0899/0859.Buddy Strings/README.md

+97-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
<li><code>A</code> 和 <code>B</code> 仅由小写字母构成。</li>
5959
</ol>
6060

61-
6261
## 解法
6362

6463
<!-- 这里可写通用的实现逻辑 -->
@@ -70,15 +69,111 @@
7069
<!-- 这里可写当前语言的特殊实现逻辑 -->
7170

7271
```python
73-
72+
class Solution:
73+
def buddyStrings(self, s: str, goal: str) -> bool:
74+
m, n = len(s), len(goal)
75+
if m != n:
76+
return False
77+
diff = sum(1 for i in range(n) if s[i] != goal[i])
78+
cnt1, cnt2 = Counter(s), Counter(goal)
79+
if cnt1 != cnt2:
80+
return False
81+
return diff == 2 or (diff == 0 and any(e > 1 for e in cnt1.values()))
7482
```
7583

7684
### **Java**
7785

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

8088
```java
89+
class Solution {
90+
public boolean buddyStrings(String s, String goal) {
91+
int m = s.length(), n = goal.length();
92+
if (m != n) {
93+
return false;
94+
}
95+
int diff = 0;
96+
int[] cnt1 = new int[26];
97+
int[] cnt2 = new int[26];
98+
for (int i = 0; i < n; ++i) {
99+
int a = s.charAt(i), b = goal.charAt(i);
100+
++cnt1[a - 'a'];
101+
++cnt2[b - 'a'];
102+
if (a != b) {
103+
++diff;
104+
}
105+
}
106+
boolean f = false;
107+
for (int i = 0; i < 26; ++i) {
108+
if (cnt1[i] != cnt2[i]) {
109+
return false;
110+
}
111+
if (cnt1[i] > 1) {
112+
f = true;
113+
}
114+
}
115+
return diff == 2 || (diff == 0 && f);
116+
}
117+
}
118+
```
119+
120+
### **C++**
121+
122+
```cpp
123+
class Solution {
124+
public:
125+
bool buddyStrings(string s, string goal) {
126+
int m = s.size(), n = goal.size();
127+
if (m != n) return false;
128+
int diff = 0;
129+
vector<int> cnt1(26);
130+
vector<int> cnt2(26);
131+
for (int i = 0; i < n; ++i)
132+
{
133+
++cnt1[s[i] - 'a'];
134+
++cnt2[goal[i] - 'a'];
135+
if (s[i] != goal[i]) ++diff;
136+
}
137+
bool f = false;
138+
for (int i = 0; i < 26; ++i)
139+
{
140+
if (cnt1[i] != cnt2[i]) return false;
141+
if (cnt1[i] > 1) f = true;
142+
}
143+
return diff == 2 || (diff == 0 && f);
144+
}
145+
};
146+
```
81147
148+
### **Go**
149+
150+
```go
151+
func buddyStrings(s string, goal string) bool {
152+
m, n := len(s), len(goal)
153+
if m != n {
154+
return false
155+
}
156+
diff := 0
157+
cnt1 := make([]int, 26)
158+
cnt2 := make([]int, 26)
159+
for i := 0; i < n; i++ {
160+
cnt1[s[i]-'a']++
161+
cnt2[goal[i]-'a']++
162+
if s[i] != goal[i] {
163+
diff++
164+
}
165+
}
166+
f := false
167+
for i := 0; i < 26; i++ {
168+
if cnt1[i] != cnt2[i] {
169+
return false
170+
}
171+
if cnt1[i] > 1 {
172+
f = true
173+
}
174+
}
175+
return diff == 2 || (diff == 0 && f)
176+
}
82177
```
83178

84179
### **...**

solution/0800-0899/0859.Buddy Strings/README_EN.md

+97-2
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,116 @@
5252
<li><code>a</code> and <code>b</code> consist of lowercase letters.</li>
5353
</ul>
5454

55-
5655
## Solutions
5756

5857
<!-- tabs:start -->
5958

6059
### **Python3**
6160

6261
```python
63-
62+
class Solution:
63+
def buddyStrings(self, s: str, goal: str) -> bool:
64+
m, n = len(s), len(goal)
65+
if m != n:
66+
return False
67+
diff = sum(1 for i in range(n) if s[i] != goal[i])
68+
cnt1, cnt2 = Counter(s), Counter(goal)
69+
if cnt1 != cnt2:
70+
return False
71+
return diff == 2 or (diff == 0 and any(e > 1 for e in cnt1.values()))
6472
```
6573

6674
### **Java**
6775

6876
```java
77+
class Solution {
78+
public boolean buddyStrings(String s, String goal) {
79+
int m = s.length(), n = goal.length();
80+
if (m != n) {
81+
return false;
82+
}
83+
int diff = 0;
84+
int[] cnt1 = new int[26];
85+
int[] cnt2 = new int[26];
86+
for (int i = 0; i < n; ++i) {
87+
int a = s.charAt(i), b = goal.charAt(i);
88+
++cnt1[a - 'a'];
89+
++cnt2[b - 'a'];
90+
if (a != b) {
91+
++diff;
92+
}
93+
}
94+
boolean f = false;
95+
for (int i = 0; i < 26; ++i) {
96+
if (cnt1[i] != cnt2[i]) {
97+
return false;
98+
}
99+
if (cnt1[i] > 1) {
100+
f = true;
101+
}
102+
}
103+
return diff == 2 || (diff == 0 && f);
104+
}
105+
}
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
bool buddyStrings(string s, string goal) {
114+
int m = s.size(), n = goal.size();
115+
if (m != n) return false;
116+
int diff = 0;
117+
vector<int> cnt1(26);
118+
vector<int> cnt2(26);
119+
for (int i = 0; i < n; ++i)
120+
{
121+
++cnt1[s[i] - 'a'];
122+
++cnt2[goal[i] - 'a'];
123+
if (s[i] != goal[i]) ++diff;
124+
}
125+
bool f = false;
126+
for (int i = 0; i < 26; ++i)
127+
{
128+
if (cnt1[i] != cnt2[i]) return false;
129+
if (cnt1[i] > 1) f = true;
130+
}
131+
return diff == 2 || (diff == 0 && f);
132+
}
133+
};
134+
```
69135
136+
### **Go**
137+
138+
```go
139+
func buddyStrings(s string, goal string) bool {
140+
m, n := len(s), len(goal)
141+
if m != n {
142+
return false
143+
}
144+
diff := 0
145+
cnt1 := make([]int, 26)
146+
cnt2 := make([]int, 26)
147+
for i := 0; i < n; i++ {
148+
cnt1[s[i]-'a']++
149+
cnt2[goal[i]-'a']++
150+
if s[i] != goal[i] {
151+
diff++
152+
}
153+
}
154+
f := false
155+
for i := 0; i < 26; i++ {
156+
if cnt1[i] != cnt2[i] {
157+
return false
158+
}
159+
if cnt1[i] > 1 {
160+
f = true
161+
}
162+
}
163+
return diff == 2 || (diff == 0 && f)
164+
}
70165
```
71166

72167
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
bool buddyStrings(string s, string goal) {
4+
int m = s.size(), n = goal.size();
5+
if (m != n) return false;
6+
int diff = 0;
7+
vector<int> cnt1(26);
8+
vector<int> cnt2(26);
9+
for (int i = 0; i < n; ++i)
10+
{
11+
++cnt1[s[i] - 'a'];
12+
++cnt2[goal[i] - 'a'];
13+
if (s[i] != goal[i]) ++diff;
14+
}
15+
bool f = false;
16+
for (int i = 0; i < 26; ++i)
17+
{
18+
if (cnt1[i] != cnt2[i]) return false;
19+
if (cnt1[i] > 1) f = true;
20+
}
21+
return diff == 2 || (diff == 0 && f);
22+
}
23+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func buddyStrings(s string, goal string) bool {
2+
m, n := len(s), len(goal)
3+
if m != n {
4+
return false
5+
}
6+
diff := 0
7+
cnt1 := make([]int, 26)
8+
cnt2 := make([]int, 26)
9+
for i := 0; i < n; i++ {
10+
cnt1[s[i]-'a']++
11+
cnt2[goal[i]-'a']++
12+
if s[i] != goal[i] {
13+
diff++
14+
}
15+
}
16+
f := false
17+
for i := 0; i < 26; i++ {
18+
if cnt1[i] != cnt2[i] {
19+
return false
20+
}
21+
if cnt1[i] > 1 {
22+
f = true
23+
}
24+
}
25+
return diff == 2 || (diff == 0 && f)
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public boolean buddyStrings(String s, String goal) {
3+
int m = s.length(), n = goal.length();
4+
if (m != n) {
5+
return false;
6+
}
7+
int diff = 0;
8+
int[] cnt1 = new int[26];
9+
int[] cnt2 = new int[26];
10+
for (int i = 0; i < n; ++i) {
11+
int a = s.charAt(i), b = goal.charAt(i);
12+
++cnt1[a - 'a'];
13+
++cnt2[b - 'a'];
14+
if (a != b) {
15+
++diff;
16+
}
17+
}
18+
boolean f = false;
19+
for (int i = 0; i < 26; ++i) {
20+
if (cnt1[i] != cnt2[i]) {
21+
return false;
22+
}
23+
if (cnt1[i] > 1) {
24+
f = true;
25+
}
26+
}
27+
return diff == 2 || (diff == 0 && f);
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def buddyStrings(self, s: str, goal: str) -> bool:
3+
m, n = len(s), len(goal)
4+
if m != n:
5+
return False
6+
diff = sum(1 for i in range(n) if s[i] != goal[i])
7+
cnt1, cnt2 = Counter(s), Counter(goal)
8+
if cnt1 != cnt2:
9+
return False
10+
return diff == 2 or (diff == 0 and any(e > 1 for e in cnt1.values()))

0 commit comments

Comments
 (0)