给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。
「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。
解法一
暴力破解
class Solution {
public int maxScore(String s) {
char[] ch = s.toCharArray();//最大得分int max = 0;//每次循环一轮后的得分int count;for (int i = 1; i < ch.length; i++) {
count = 0;//遍历左子字符串for (int j = 0; j < i; j++) {
if (ch[j] == '0') count++;} //遍历右子字符串for (int j = i; j < ch.length; j++) {
if (ch[j] == '1') count++;}//比较max和countif (count > max) max = count;}return max;}
}
解法二
看题解后,按照其思路做出来的,先遍历一遍得到0的个数left,然后从后往前遍历再一次,如果为1,right加1,如果为0,left减1,每次循环运算后,比较最大得分,最后返回最大得分。
class Solution {
public int maxScore(String s) {
char[] ch = s.toCharArray();//left为左边的得分(0的个数)int left = 0;for (char c : ch) {
if (c == '0') left++;}//max为最大得分int max = 0;//right为右边的得分(1的个数)int right = 0;//判断条件i不能等于0,因为如果等于0,相当于整个字符串都是右子串,所以需要留一位for (int i = ch.length - 1; i > 0; i--) {
//如果当前值为1,那么right加1,而left因为得数是0,所以1时没损失if (ch[i] == '1') right++;//如果当前值为0,说明减去了一个left左边0的个数else left--;//比较最大得分if (left + right > max) max = left + right;}return max;}
}