Skip to content

Commit 485a4b9

Browse files
committed
feat: add solutions to lc problem: No.1537
No.1537.Get the Maximum Score
1 parent 461e6ad commit 485a4b9

File tree

9 files changed

+421
-45
lines changed

9 files changed

+421
-45
lines changed

solution/1100-1199/1156.Swap For Longest Repeated Character Substring/README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@
5757

5858
**方法一:双指针**
5959

60-
我们先统计每个字符出现的次数,记录在数组 `cnt`
60+
我们先用哈希表或数组 $cnt$ 统计字符串 $text$ 中每个字符出现的次数
6161

62-
然后我们使用双指针 $i$ 和 $j$,初始时 $i = j = 0$,然后我们不断地向右移动 $j$,直到 $j$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $l = j - i$ 的子串,其中所有字符都相同。然后我们跳过第 $j$ 个字符,用指针 $k$ 继续向右移动,直到 $k$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $r = k - j - 1$ 的子串,其中所有字符都相同。此时我们可以得到的最长子串长度为 $min(l + r + 1, cnt[text[i]])$,其中 $cnt[text[i]]$ 表示字符 $text[i]$ 出现的次数。我们将这个值与当前的最大值进行比较,取较大值作为答案
62+
接下来,我们定义一个指针 $i$,初始时 $i = 0$。每一次,我们将指针 $j$ 指向 $i$,并不断地向右移动 $j$,直到 $j$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $l = j - i$ 的子串 $text[i..j-1]$,其中所有字符都相同
6363

64-
时间复杂度为 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串的长度,而 $C$ 为字符集的大小。本题中 $C = 26$。
64+
然后我们跳过指针 $j$ 指向的字符,用指针 $k$ 继续向右移动,直到 $k$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $r = k - j - 1$ 的子串 $text[j+1..k-1]$,其中所有字符都相同。那么我们最多通过一次交换操作,可以得到的最长单字符重复子串的长度为 $\min(l + r + 1, cnt[text[i]])$。接下来,我们将指针 $i$ 移动到 $j$,继续寻找下一个子串。我们取所有满足条件的子串的最大长度即可。
65+
66+
时间复杂度为 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串的长度;而 $C$ 为字符集的大小,本题中 $C = 26$。
6567

6668
<!-- tabs:start -->
6769

solution/1500-1599/1537.Get the Maximum Score/README.md

Lines changed: 146 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,167 @@
7272

7373
<!-- 这里可写通用的实现逻辑 -->
7474

75+
76+
7577
<!-- tabs:start -->
7678

7779
### **Python3**
7880

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

8183
```python
82-
84+
class Solution:
85+
def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
86+
mod = 10**9 + 7
87+
m, n = len(nums1), len(nums2)
88+
i = j = 0
89+
f = g = 0
90+
while i < m or j < n:
91+
if i == m:
92+
g += nums2[j]
93+
j += 1
94+
elif j == n:
95+
f += nums1[i]
96+
i += 1
97+
elif nums1[i] < nums2[j]:
98+
f += nums1[i]
99+
i += 1
100+
elif nums1[i] > nums2[j]:
101+
g += nums2[j]
102+
j += 1
103+
else:
104+
f = g = max(f, g) + nums1[i]
105+
i += 1
106+
j += 1
107+
return max(f, g) % mod
83108
```
84109

85110
### **Java**
86111

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

89114
```java
115+
class Solution {
116+
public int maxSum(int[] nums1, int[] nums2) {
117+
final int mod = (int) 1e9 + 7;
118+
int m = nums1.length, n = nums2.length;
119+
int i = 0, j = 0;
120+
long f = 0, g = 0;
121+
while (i < m || j < n) {
122+
if (i == m) {
123+
g += nums2[j++];
124+
} else if (j == n) {
125+
f += nums1[i++];
126+
} else if (nums1[i] < nums2[j]) {
127+
f += nums1[i++];
128+
} else if (nums1[i] > nums2[j]) {
129+
g += nums2[j++];
130+
} else {
131+
f = g = Math.max(f, g) + nums1[i];
132+
i++;
133+
j++;
134+
}
135+
}
136+
return (int) (Math.max(f, g) % mod);
137+
}
138+
}
139+
```
140+
141+
### **C++**
142+
143+
```cpp
144+
class Solution {
145+
public:
146+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
147+
const int mod = 1e9 + 7;
148+
int m = nums1.size(), n = nums2.size();
149+
int i = 0, j = 0;
150+
long long f = 0, g = 0;
151+
while (i < m || j < n) {
152+
if (i == m) {
153+
g += nums2[j++];
154+
} else if (j == n) {
155+
f += nums1[i++];
156+
} else if (nums1[i] < nums2[j]) {
157+
f += nums1[i++];
158+
} else if (nums1[i] > nums2[j]) {
159+
g += nums2[j++];
160+
} else {
161+
f = g = max(f, g) + nums1[i];
162+
i++;
163+
j++;
164+
}
165+
}
166+
return max(f, g) % mod;
167+
}
168+
};
169+
```
170+
171+
### **Go**
172+
173+
```go
174+
func maxSum(nums1 []int, nums2 []int) int {
175+
const mod int = 1e9 + 7
176+
m, n := len(nums1), len(nums2)
177+
i, j := 0, 0
178+
f, g := 0, 0
179+
for i < m || j < n {
180+
if i == m {
181+
g += nums2[j]
182+
j++
183+
} else if j == n {
184+
f += nums1[i]
185+
i++
186+
} else if nums1[i] < nums2[j] {
187+
f += nums1[i]
188+
i++
189+
} else if nums1[i] > nums2[j] {
190+
g += nums2[j]
191+
j++
192+
} else {
193+
f = max(f, g) + nums1[i]
194+
g = f
195+
i++
196+
j++
197+
}
198+
}
199+
return max(f, g) % mod
200+
}
201+
202+
func max(a, b int) int {
203+
if a > b {
204+
return a
205+
}
206+
return b
207+
}
208+
```
90209

210+
### **TypeScript**
211+
212+
```ts
213+
function maxSum(nums1: number[], nums2: number[]): number {
214+
const mod = 1e9 + 7;
215+
const m = nums1.length;
216+
const n = nums2.length;
217+
let [f, g] = [0, 0];
218+
let [i, j] = [0, 0];
219+
while (i < m || j < n) {
220+
if (i === m) {
221+
g += nums2[j++];
222+
} else if (j === n) {
223+
f += nums1[i++];
224+
} else if (nums1[i] < nums2[j]) {
225+
f += nums1[i++];
226+
} else if (nums1[i] > nums2[j]) {
227+
g += nums2[j++];
228+
} else {
229+
f = g = Math.max(f, g) + nums1[i];
230+
i++;
231+
j++;
232+
}
233+
}
234+
return Math.max(f, g) % mod;
235+
}
91236
```
92237

93238
### **...**

solution/1500-1599/1537.Get the Maximum Score/README_EN.md

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,156 @@ Maximum sum is obtained with the path [6,7,8,9,10].
6363
### **Python3**
6464

6565
```python
66-
66+
class Solution:
67+
def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
68+
mod = 10**9 + 7
69+
m, n = len(nums1), len(nums2)
70+
i = j = 0
71+
f = g = 0
72+
while i < m or j < n:
73+
if i == m:
74+
g += nums2[j]
75+
j += 1
76+
elif j == n:
77+
f += nums1[i]
78+
i += 1
79+
elif nums1[i] < nums2[j]:
80+
f += nums1[i]
81+
i += 1
82+
elif nums1[i] > nums2[j]:
83+
g += nums2[j]
84+
j += 1
85+
else:
86+
f = g = max(f, g) + nums1[i]
87+
i += 1
88+
j += 1
89+
return max(f, g) % mod
6790
```
6891

6992
### **Java**
7093

7194
```java
95+
class Solution {
96+
public int maxSum(int[] nums1, int[] nums2) {
97+
final int mod = (int) 1e9 + 7;
98+
int m = nums1.length, n = nums2.length;
99+
int i = 0, j = 0;
100+
long f = 0, g = 0;
101+
while (i < m || j < n) {
102+
if (i == m) {
103+
g += nums2[j++];
104+
} else if (j == n) {
105+
f += nums1[i++];
106+
} else if (nums1[i] < nums2[j]) {
107+
f += nums1[i++];
108+
} else if (nums1[i] > nums2[j]) {
109+
g += nums2[j++];
110+
} else {
111+
f = g = Math.max(f, g) + nums1[i];
112+
i++;
113+
j++;
114+
}
115+
}
116+
return (int) (Math.max(f, g) % mod);
117+
}
118+
}
119+
```
120+
121+
### **C++**
122+
123+
```cpp
124+
class Solution {
125+
public:
126+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
127+
const int mod = 1e9 + 7;
128+
int m = nums1.size(), n = nums2.size();
129+
int i = 0, j = 0;
130+
long long f = 0, g = 0;
131+
while (i < m || j < n) {
132+
if (i == m) {
133+
g += nums2[j++];
134+
} else if (j == n) {
135+
f += nums1[i++];
136+
} else if (nums1[i] < nums2[j]) {
137+
f += nums1[i++];
138+
} else if (nums1[i] > nums2[j]) {
139+
g += nums2[j++];
140+
} else {
141+
f = g = max(f, g) + nums1[i];
142+
i++;
143+
j++;
144+
}
145+
}
146+
return max(f, g) % mod;
147+
}
148+
};
149+
```
150+
151+
### **Go**
152+
153+
```go
154+
func maxSum(nums1 []int, nums2 []int) int {
155+
const mod int = 1e9 + 7
156+
m, n := len(nums1), len(nums2)
157+
i, j := 0, 0
158+
f, g := 0, 0
159+
for i < m || j < n {
160+
if i == m {
161+
g += nums2[j]
162+
j++
163+
} else if j == n {
164+
f += nums1[i]
165+
i++
166+
} else if nums1[i] < nums2[j] {
167+
f += nums1[i]
168+
i++
169+
} else if nums1[i] > nums2[j] {
170+
g += nums2[j]
171+
j++
172+
} else {
173+
f = max(f, g) + nums1[i]
174+
g = f
175+
i++
176+
j++
177+
}
178+
}
179+
return max(f, g) % mod
180+
}
181+
182+
func max(a, b int) int {
183+
if a > b {
184+
return a
185+
}
186+
return b
187+
}
188+
```
72189

190+
### **TypeScript**
191+
192+
```ts
193+
function maxSum(nums1: number[], nums2: number[]): number {
194+
const mod = 1e9 + 7;
195+
const m = nums1.length;
196+
const n = nums2.length;
197+
let [f, g] = [0, 0];
198+
let [i, j] = [0, 0];
199+
while (i < m || j < n) {
200+
if (i === m) {
201+
g += nums2[j++];
202+
} else if (j === n) {
203+
f += nums1[i++];
204+
} else if (nums1[i] < nums2[j]) {
205+
f += nums1[i++];
206+
} else if (nums1[i] > nums2[j]) {
207+
g += nums2[j++];
208+
} else {
209+
f = g = Math.max(f, g) + nums1[i];
210+
i++;
211+
j++;
212+
}
213+
}
214+
return Math.max(f, g) % mod;
215+
}
73216
```
74217

75218
### **...**
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
4+
const int mod = 1e9 + 7;
5+
int m = nums1.size(), n = nums2.size();
6+
int i = 0, j = 0;
7+
long long f = 0, g = 0;
8+
while (i < m || j < n) {
9+
if (i == m) {
10+
g += nums2[j++];
11+
} else if (j == n) {
12+
f += nums1[i++];
13+
} else if (nums1[i] < nums2[j]) {
14+
f += nums1[i++];
15+
} else if (nums1[i] > nums2[j]) {
16+
g += nums2[j++];
17+
} else {
18+
f = g = max(f, g) + nums1[i];
19+
i++;
20+
j++;
21+
}
22+
}
23+
return max(f, g) % mod;
24+
}
25+
};

0 commit comments

Comments
 (0)