-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package leetcode; | ||
|
||
/** | ||
* 1422. 分割字符串的最大得分 | ||
* 给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。 | ||
* | ||
* 「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。 | ||
* | ||
* | ||
* | ||
* 示例 1: | ||
* | ||
* 输入:s = "011101" | ||
* 输出:5 | ||
* 解释: | ||
* 将字符串 s 划分为两个非空子字符串的可行方案有: | ||
* 左子字符串 = "0" 且 右子字符串 = "11101",得分 = 1 + 4 = 5 | ||
* 左子字符串 = "01" 且 右子字符串 = "1101",得分 = 1 + 3 = 4 | ||
* 左子字符串 = "011" 且 右子字符串 = "101",得分 = 1 + 2 = 3 | ||
* 左子字符串 = "0111" 且 右子字符串 = "01",得分 = 1 + 1 = 2 | ||
* 左子字符串 = "01110" 且 右子字符串 = "1",得分 = 2 + 1 = 3 | ||
* 示例 2: | ||
* | ||
* 输入:s = "00111" | ||
* 输出:5 | ||
* 解释:当 左子字符串 = "00" 且 右子字符串 = "111" 时,我们得到最大得分 = 2 + 3 = 5 | ||
* 示例 3: | ||
* | ||
* 输入:s = "1111" | ||
* 输出:3 | ||
* | ||
* | ||
* 提示: | ||
* | ||
* 2 <= s.length <= 500 | ||
* 字符串 s 仅由字符 '0' 和 '1' 组成。 | ||
* @author chenzw | ||
* @date 2022/8/14 | ||
*/ | ||
public class Solution1422 { | ||
//前缀和 | ||
public int maxScore(String s) { | ||
int n = s.length(); | ||
int[] v0 = new int[n+1]; | ||
for(int i = 1;i<=n;i++){ | ||
if(s.charAt(i-1)=='0'){ | ||
v0[i] = v0[i-1]+1; | ||
}else{ | ||
v0[i] = v0[i-1]; | ||
} | ||
} | ||
int max = 0; | ||
int x = 0; | ||
for(int i=n-1;i>0;i--){ | ||
if(s.charAt(i)=='1'){ | ||
x ++; | ||
} | ||
max = Math.max(max,x+v0[i]); | ||
} | ||
return max; | ||
} | ||
} |