😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。
「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。
2、基础框架
- Java版本框架代码如下:
class Solution {
public int maxScore(String s) {
}
}
3、原题链接
二、解题报告
1、思路分析
(1)利用类似前缀和的方法分别计算出左子字符串中 0 的数量和 右 子字符串中 1 的数量,然后遍历数组计算得分的最大值。
2、代码详解
class Solution {
public int maxScore(String s) {
char[] arr = s.toCharArray();
int n = arr.length;
int[] left = new int[n];
int[] right = new int[n];
int ans = 0;
for(int i = 0;i < n;i++) {
if(arr[i] == '0') {
left[i]++;
}
if(i > 0) {
left[i] += left[i - 1];
}
}
for(int i = n - 1;i >= 0;i--) {
if(arr[i] == '1') {
right[i]++;
}
if(i < n - 1) {
right[i] += right[i + 1];
}
}
for(int i = 0; i < n - 1;i ++) {
ans = Math.max(ans,left[i] + right[i + 1]);
}
return ans;
}
}
三、本题知识
前缀和