当前位置: 代码迷 >> 综合 >> 【LeetCode】1422. 分割字符串的最大得分(Java)
  详细解决方案

【LeetCode】1422. 分割字符串的最大得分(Java)

热度:35   发布时间:2024-02-25 03:23:35.0

给你一个由若干 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;}
}

在这里插入图片描述

  相关解决方案