• 入门力扣自学笔记123 C++ (题目编号768)


    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' 组成。


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/maximum-score-after-splitting-a-string
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    思路:

    因为题目数据元素只有500,直接暴力双指针枚举所有存在的两个 非空 子字符串(即 左 子字符串和 右 子字符串),并统计两个子串之中的有效分数,每次保存所能获得的最大得分。又因为数据量少不会超时。


    代码:

    1. class Solution {
    2. public:
    3. int maxScore(string s) {
    4. int n=s.size(),p=0,q=0,ans=0;
    5. for(int i=0;i//预处理
    6. {
    7. if(s[i]=='1') p=p+1;
    8. }
    9. for(int i=0;i<(n-1);i++)
    10. {
    11. if(s[i]=='1') p=p-1;
    12. else q=q+1;
    13. ans=max(ans,p+q);
    14. }
    15. return ans;
    16. }
    17. };

  • 相关阅读:
    5.组合与继承
    MySQL用户管理
    LeetCode 1345、1371
    B树、B+树、红黑树的定义、之间的区别、优缺点、数据结构、应用等
    我在高职教STM32——LCD液晶显示(3)
    Android安全与隐私相关特性的行为变更分析
    Linux网络配置详解
    【web-渗透测试方法】(15.4)测试会话管理机制
    AC-PEG-NH2,Acrylate-PEG-Amine,丙烯酸酯PEG氨基含有PEG间隔基
    http概念
  • 原文地址:https://blog.csdn.net/DK_Sorhic/article/details/126335403