Leetcode刷题笔记题解(C++):1422. 分割字符串的最大得分

思路一:常规暴力做法,直接按要求去分割字符串然后求得分值,最后比较求出最大的得分值即可。

代码如下:

class Solution {
public:

    //暴力求解、对于所有的情况按题要求拆分进行最大值的获取
    int maxScore1(string s) {
        int size=s.length();
        int max_score=0;
        for(int i=1;i<size;i++){
            string s1=s.substr(0,i);//取左边的字符串
            string s2=s.substr(i,size-i);//取右边的字符串
            max_score=max(max_score,sum(s1,s2));//取最大值
        }
        return max_score;
    }
    //获得分值和
    int sum(string s1,string s2){
        int total=0;
        for(int i=0;i<s1.length();i++){
            if(s1[i]=='0') total++;
        }
        for(int i=0;i<s2.length();i++){
            if(s2[i]=='1') total++;
        }
        return total;
    }
};

思路二:得到字符串中1的个数,用left来记左边得分值,用right记右边得分值(初试为字符串中1的个数),依次再遍历字符串中字符,如果当前字符为'0' 则left++,如果为'1',则right--;

代码如下:

class Solution {
public:
    //非暴力求解
    int maxScore(string s) {
        int size=s.length();
        int right=0,left=0;
        //统计整个字符串中'1'的个数
        for(int i=0;i<size;i++){
            if(s[i]=='1') right++;
        }
        int max_score=0;
        //依次遍历,从第一个开始作为左边的,如果为0,left++,如果为1,right--
        for(int i=0;i<size-1;i++){
            if(s[i]=='0') left++;
            else right--;
            max_score=max(max_score,left+right);//取每次之后的最大值
        }
        return max_score;
    }

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demo.demo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值