Skip to content

Commit d20cd54

Browse files
committed
feat: update solutions to lc/lcof2 problems
lcof2 No.05 & lc No.0319.Maximum Product of Word Lengths
1 parent d49d8c0 commit d20cd54

File tree

8 files changed

+60
-82
lines changed

8 files changed

+60
-82
lines changed

lcof2/剑指 Offer II 005. 单词长度的最大乘积/README.md

+14-25
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
<!-- 这里可写通用的实现逻辑 -->
5050

51-
因为只有 26 个小写字符,所以可以用一个 `int32` 存储字符的出现情况,然后枚举最大乘积
51+
因为只有 26 个小写字符,所以可以用一个 `int32` 存储字符的出现情况,然后枚举最大乘积
5252

5353
<!-- tabs:start -->
5454

@@ -60,12 +60,12 @@
6060
class Solution:
6161
def maxProduct(self, words: List[str]) -> int:
6262
n = len(words)
63-
mask = [0 for _ in range(n)]
63+
mask = [0] * n
6464
for i, word in enumerate(words):
6565
for ch in word:
6666
mask[i] |= 1 << (ord(ch) - ord('a'))
6767
ans = 0
68-
for i in range(0, n - 1):
68+
for i in range(n - 1):
6969
for j in range(i + 1, n):
7070
if mask[i] & mask[j] == 0:
7171
ans = max(ans, len(words[i]) * len(words[j]))
@@ -135,28 +135,17 @@ func max(a, b int) int {
135135
class Solution {
136136
public:
137137
int maxProduct(vector<string>& words) {
138-
vector<vector<bool>> hash(words.size(), vector<bool>(26, false));
139-
for (int i = 0; i < words.size(); i++)
140-
for (char c: words[i])
141-
hash[i][c - 'a'] = true;
142-
143-
int res = 0;
144-
for (int i = 0; i < words.size(); i++) {
145-
for (int j = i + 1; j < words.size(); j++) {
146-
int k = 0;
147-
for (; k < 26; k++) {
148-
if (hash[i][k] && hash[j][k])
149-
break;
150-
}
151-
152-
if (k == 26) {
153-
int prod = words[i].size() * words[j].size();
154-
res = max(res, prod);
155-
}
156-
}
157-
}
158-
159-
return res;
138+
int n = words.size();
139+
vector<int> mask(n);
140+
for (int i = 0; i < n; ++i)
141+
for (char ch : words[i])
142+
mask[i] |= 1 << (ch - 'a');
143+
int ans = 0;
144+
for (int i = 0; i < n - 1; ++i)
145+
for (int j = i + 1; j < n; ++j)
146+
if (!(mask[i] & mask[j]))
147+
ans = max(ans, (int) words[i].size() * (int) words[j].size());
148+
return ans;
160149
}
161150
};
162151
```
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
11
class Solution {
22
public:
33
int maxProduct(vector<string>& words) {
4-
vector<vector<bool>> hash(words.size(), vector<bool>(26, false));
5-
for (int i = 0; i < words.size(); i++)
6-
for (char c: words[i])
7-
hash[i][c - 'a'] = true;
8-
9-
int res = 0;
10-
for (int i = 0; i < words.size(); i++) {
11-
for (int j = i + 1; j < words.size(); j++) {
12-
int k = 0;
13-
for (; k < 26; k++) {
14-
if (hash[i][k] && hash[j][k])
15-
break;
16-
}
17-
18-
if (k == 26) {
19-
int prod = words[i].size() * words[j].size();
20-
res = max(res, prod);
21-
}
22-
}
23-
}
24-
25-
return res;
4+
int n = words.size();
5+
vector<int> mask(n);
6+
for (int i = 0; i < n; ++i)
7+
for (char ch : words[i])
8+
mask[i] |= 1 << (ch - 'a');
9+
int ans = 0;
10+
for (int i = 0; i < n - 1; ++i)
11+
for (int j = i + 1; j < n; ++j)
12+
if (!(mask[i] & mask[j]))
13+
ans = max(ans, (int) words[i].size() * (int) words[j].size());
14+
return ans;
2615
}
2716
};

lcof2/剑指 Offer II 005. 单词长度的最大乘积/Solution.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution:
22
def maxProduct(self, words: List[str]) -> int:
33
n = len(words)
4-
mask = [0 for _ in range(n)]
4+
mask = [0] * n
55
for i, word in enumerate(words):
66
for ch in word:
77
mask[i] |= 1 << (ord(ch) - ord('a'))
88
ans = 0
9-
for i in range(0, n - 1):
9+
for i in range(n - 1):
1010
for j in range(i + 1, n):
1111
if mask[i] & mask[j] == 0:
1212
ans = max(ans, len(words[i]) * len(words[j]))

solution/0300-0399/0318.Maximum Product of Word Lengths/README.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@
4040
class Solution:
4141
def maxProduct(self, words: List[str]) -> int:
4242
n = len(words)
43-
masks = [0] * n
43+
mask = [0] * n
4444
for i, word in enumerate(words):
45-
for c in word:
46-
masks[i] |= (1 << (ord(c) - ord('a')))
45+
for ch in word:
46+
mask[i] |= 1 << (ord(ch) - ord('a'))
4747
ans = 0
4848
for i in range(n - 1):
4949
for j in range(i + 1, n):
50-
if (masks[i] & masks[j]) == 0:
50+
if mask[i] & mask[j] == 0:
5151
ans = max(ans, len(words[i]) * len(words[j]))
5252
return ans
5353
```
@@ -86,14 +86,14 @@ class Solution {
8686
public:
8787
int maxProduct(vector<string>& words) {
8888
int n = words.size();
89-
vector<int> masks(n);
89+
vector<int> mask(n);
9090
for (int i = 0; i < n; ++i)
91-
for (char c : words[i])
92-
masks[i] |= (1 << (c - 'a'));
91+
for (char ch : words[i])
92+
mask[i] |= 1 << (ch - 'a');
9393
int ans = 0;
9494
for (int i = 0; i < n - 1; ++i)
9595
for (int j = i + 1; j < n; ++j)
96-
if ((masks[i] & masks[j]) == 0)
96+
if (!(mask[i] & mask[j]))
9797
ans = max(ans, (int) (words[i].size() * words[j].size()));
9898
return ans;
9999
}
@@ -105,16 +105,16 @@ public:
105105
```go
106106
func maxProduct(words []string) int {
107107
n := len(words)
108-
masks := make([]int, n)
108+
mask := make([]int, n)
109109
for i, word := range words {
110110
for _, c := range word {
111-
masks[i] |= (1 << (c - 'a'))
111+
mask[i] |= (1 << (c - 'a'))
112112
}
113113
}
114114
ans := 0
115115
for i := 0; i < n-1; i++ {
116116
for j := i + 1; j < n; j++ {
117-
if (masks[i] & masks[j]) == 0 {
117+
if mask[i]&mask[j] == 0 {
118118
ans = max(ans, len(words[i])*len(words[j]))
119119
}
120120
}

solution/0300-0399/0318.Maximum Product of Word Lengths/README_EN.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@
5050
class Solution:
5151
def maxProduct(self, words: List[str]) -> int:
5252
n = len(words)
53-
masks = [0] * n
53+
mask = [0] * n
5454
for i, word in enumerate(words):
55-
for c in word:
56-
masks[i] |= (1 << (ord(c) - ord('a')))
55+
for ch in word:
56+
mask[i] |= 1 << (ord(ch) - ord('a'))
5757
ans = 0
5858
for i in range(n - 1):
5959
for j in range(i + 1, n):
60-
if (masks[i] & masks[j]) == 0:
60+
if mask[i] & mask[j] == 0:
6161
ans = max(ans, len(words[i]) * len(words[j]))
6262
return ans
6363
```
@@ -94,14 +94,14 @@ class Solution {
9494
public:
9595
int maxProduct(vector<string>& words) {
9696
int n = words.size();
97-
vector<int> masks(n);
97+
vector<int> mask(n);
9898
for (int i = 0; i < n; ++i)
99-
for (char c : words[i])
100-
masks[i] |= (1 << (c - 'a'));
99+
for (char ch : words[i])
100+
mask[i] |= 1 << (ch - 'a');
101101
int ans = 0;
102102
for (int i = 0; i < n - 1; ++i)
103103
for (int j = i + 1; j < n; ++j)
104-
if ((masks[i] & masks[j]) == 0)
104+
if (!(mask[i] & mask[j]))
105105
ans = max(ans, (int) (words[i].size() * words[j].size()));
106106
return ans;
107107
}
@@ -113,16 +113,16 @@ public:
113113
```go
114114
func maxProduct(words []string) int {
115115
n := len(words)
116-
masks := make([]int, n)
116+
mask := make([]int, n)
117117
for i, word := range words {
118118
for _, c := range word {
119-
masks[i] |= (1 << (c - 'a'))
119+
mask[i] |= (1 << (c - 'a'))
120120
}
121121
}
122122
ans := 0
123123
for i := 0; i < n-1; i++ {
124124
for j := i + 1; j < n; j++ {
125-
if (masks[i] & masks[j]) == 0 {
125+
if mask[i]&mask[j] == 0 {
126126
ans = max(ans, len(words[i])*len(words[j]))
127127
}
128128
}

solution/0300-0399/0318.Maximum Product of Word Lengths/Solution.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
public:
33
int maxProduct(vector<string>& words) {
44
int n = words.size();
5-
vector<int> masks(n);
5+
vector<int> mask(n);
66
for (int i = 0; i < n; ++i)
7-
for (char c : words[i])
8-
masks[i] |= (1 << (c - 'a'));
7+
for (char ch : words[i])
8+
mask[i] |= 1 << (ch - 'a');
99
int ans = 0;
1010
for (int i = 0; i < n - 1; ++i)
1111
for (int j = i + 1; j < n; ++j)
12-
if ((masks[i] & masks[j]) == 0)
12+
if (!(mask[i] & mask[j]))
1313
ans = max(ans, (int) (words[i].size() * words[j].size()));
1414
return ans;
1515
}

solution/0300-0399/0318.Maximum Product of Word Lengths/Solution.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
func maxProduct(words []string) int {
22
n := len(words)
3-
masks := make([]int, n)
3+
mask := make([]int, n)
44
for i, word := range words {
55
for _, c := range word {
6-
masks[i] |= (1 << (c - 'a'))
6+
mask[i] |= (1 << (c - 'a'))
77
}
88
}
99
ans := 0
1010
for i := 0; i < n-1; i++ {
1111
for j := i + 1; j < n; j++ {
12-
if (masks[i] & masks[j]) == 0 {
12+
if mask[i]&mask[j] == 0 {
1313
ans = max(ans, len(words[i])*len(words[j]))
1414
}
1515
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Solution:
22
def maxProduct(self, words: List[str]) -> int:
33
n = len(words)
4-
masks = [0] * n
4+
mask = [0] * n
55
for i, word in enumerate(words):
6-
for c in word:
7-
masks[i] |= (1 << (ord(c) - ord('a')))
6+
for ch in word:
7+
mask[i] |= 1 << (ord(ch) - ord('a'))
88
ans = 0
99
for i in range(n - 1):
1010
for j in range(i + 1, n):
11-
if (masks[i] & masks[j]) == 0:
11+
if mask[i] & mask[j] == 0:
1212
ans = max(ans, len(words[i]) * len(words[j]))
1313
return ans

0 commit comments

Comments
 (0)