Skip to content

Commit 48b6690

Browse files
committed
feat: add solutions to lc problem: No.2506
No.2506.Count Pairs Of Similar Strings
1 parent 34d2a5d commit 48b6690

File tree

6 files changed

+164
-8
lines changed

6 files changed

+164
-8
lines changed

solution/2500-2599/2506.Count Pairs Of Similar Strings/README.md

+60-4
Original file line numberDiff line numberDiff line change
@@ -58,34 +58,90 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61+
**方法一:哈希表 + 位运算**
62+
63+
对于每个字符串,我们可以将其转换为一个长度为 $26$ 的二进制数,其中第 $i$ 位为 $1$ 表示该字符串中包含第 $i$ 个字母。
64+
65+
如果两个字符串包含相同的字母,则它们的二进制数是相同的,因此,对于每个字符串,我们用哈希表统计其二进制数出现的次数,每一次累加到答案中,再将其二进制数出现的次数加 $1$。
66+
67+
时间复杂度 $O(L)$,空间复杂度 $O(n)$。其中 $L$ 是所有字符串的长度之和,而 $n$ 是字符串的数量。
68+
6169
<!-- tabs:start -->
6270

6371
### **Python3**
6472

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

6775
```python
68-
76+
class Solution:
77+
def similarPairs(self, words: List[str]) -> int:
78+
ans = 0
79+
cnt = Counter()
80+
for w in words:
81+
v = 0
82+
for c in w:
83+
v |= 1 << (ord(c) - ord("A"))
84+
ans += cnt[v]
85+
cnt[v] += 1
86+
return ans
6987
```
7088

7189
### **Java**
7290

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

7593
```java
76-
94+
class Solution {
95+
public int similarPairs(String[] words) {
96+
int ans = 0;
97+
Map<Integer, Integer> cnt = new HashMap<>();
98+
for (var w : words) {
99+
int v = 0;
100+
for (int i = 0; i < w.length(); ++i) {
101+
v |= 1 << (w.charAt(i) - 'a');
102+
}
103+
ans += cnt.getOrDefault(v, 0);
104+
cnt.put(v, cnt.getOrDefault(v, 0) + 1);
105+
}
106+
return ans;
107+
}
108+
}
77109
```
78110

79111
### **C++**
80112

81113
```cpp
82-
114+
class Solution {
115+
public:
116+
int similarPairs(vector<string>& words) {
117+
int ans = 0;
118+
unordered_map<int, int> cnt;
119+
for (auto& w : words) {
120+
int v = 0;
121+
for (auto& c : w) v |= 1 << c - 'a';
122+
ans += cnt[v];
123+
cnt[v]++;
124+
}
125+
return ans;
126+
}
127+
};
83128
```
84129
85130
### **Go**
86131
87132
```go
88-
133+
func similarPairs(words []string) (ans int) {
134+
cnt := map[int]int{}
135+
for _, w := range words {
136+
v := 0
137+
for _, c := range w {
138+
v |= 1 << (c - 'a')
139+
}
140+
ans += cnt[v]
141+
cnt[v]++
142+
}
143+
return
144+
}
89145
```
90146

91147
### **...**

solution/2500-2599/2506.Count Pairs Of Similar Strings/README_EN.md

+52-4
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,73 @@
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def similarPairs(self, words: List[str]) -> int:
65+
ans = 0
66+
cnt = Counter()
67+
for w in words:
68+
v = 0
69+
for c in w:
70+
v |= 1 << (ord(c) - ord("A"))
71+
ans += cnt[v]
72+
cnt[v] += 1
73+
return ans
6474
```
6575

6676
### **Java**
6777

6878
```java
69-
79+
class Solution {
80+
public int similarPairs(String[] words) {
81+
int ans = 0;
82+
Map<Integer, Integer> cnt = new HashMap<>();
83+
for (var w : words) {
84+
int v = 0;
85+
for (int i = 0; i < w.length(); ++i) {
86+
v |= 1 << (w.charAt(i) - 'a');
87+
}
88+
ans += cnt.getOrDefault(v, 0);
89+
cnt.put(v, cnt.getOrDefault(v, 0) + 1);
90+
}
91+
return ans;
92+
}
93+
}
7094
```
7195

7296
### **C++**
7397

7498
```cpp
75-
99+
class Solution {
100+
public:
101+
int similarPairs(vector<string>& words) {
102+
int ans = 0;
103+
unordered_map<int, int> cnt;
104+
for (auto& w : words) {
105+
int v = 0;
106+
for (auto& c : w) v |= 1 << c - 'a';
107+
ans += cnt[v];
108+
cnt[v]++;
109+
}
110+
return ans;
111+
}
112+
};
76113
```
77114
78115
### **Go**
79116
80117
```go
81-
118+
func similarPairs(words []string) (ans int) {
119+
cnt := map[int]int{}
120+
for _, w := range words {
121+
v := 0
122+
for _, c := range w {
123+
v |= 1 << (c - 'a')
124+
}
125+
ans += cnt[v]
126+
cnt[v]++
127+
}
128+
return
129+
}
82130
```
83131

84132
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
int similarPairs(vector<string>& words) {
4+
int ans = 0;
5+
unordered_map<int, int> cnt;
6+
for (auto& w : words) {
7+
int v = 0;
8+
for (auto& c : w) v |= 1 << c - 'a';
9+
ans += cnt[v];
10+
cnt[v]++;
11+
}
12+
return ans;
13+
}
14+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
func similarPairs(words []string) (ans int) {
2+
cnt := map[int]int{}
3+
for _, w := range words {
4+
v := 0
5+
for _, c := range w {
6+
v |= 1 << (c - 'a')
7+
}
8+
ans += cnt[v]
9+
cnt[v]++
10+
}
11+
return
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int similarPairs(String[] words) {
3+
int ans = 0;
4+
Map<Integer, Integer> cnt = new HashMap<>();
5+
for (var w : words) {
6+
int v = 0;
7+
for (int i = 0; i < w.length(); ++i) {
8+
v |= 1 << (w.charAt(i) - 'a');
9+
}
10+
ans += cnt.getOrDefault(v, 0);
11+
cnt.put(v, cnt.getOrDefault(v, 0) + 1);
12+
}
13+
return ans;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def similarPairs(self, words: List[str]) -> int:
3+
ans = 0
4+
cnt = Counter()
5+
for w in words:
6+
v = 0
7+
for c in w:
8+
v |= 1 << (ord(c) - ord("A"))
9+
ans += cnt[v]
10+
cnt[v] += 1
11+
return ans

0 commit comments

Comments
 (0)