LeetCode分割字符串的最大得分使用JavaScript解题,击败了100%的用户|前端学算法

简介: LeetCode分割字符串的最大得分使用JavaScript解题,击败了100%的用户|前端学算法

分割字符串的最大得分


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


解题思路


最简单的方式就是我们可以先把字符串s分成两个字符串,然后各自计算得分,把每种情况罗列出来,最后比较一下最大的分数;但是这样计算量比较大,需要至少三个循环来完成,而且写起来也很麻烦。

于是我就按照自己的想法写了一个,没想到用时击败了100%的JavaScript用户

字符串的中0和1个数都是固定的,比如'1'来说,左边字符串多了一个,右边字符串必定要少一个,所以我们可以先求出来字符串s里面到底有多少个'1';先遍历一下字符串s计算一下一共有几个'1',然后再遍历一遍字符串s,如果s[i]是'0'那么左字符串加一分,如果是'1'则右字符串减一分,加一块就是现在两个字符串的得分,最后返回最大的分

以下步骤简洁明了:

  • 第一步:定义三个变量,maxScore表示最大的分数,leftScore是左字符串中'0'的个数得分,rightScore是右字符串中'1'的个数得分,开始先遍历一下字符串s,算出rightScore得分
  • 第二步:再一次遍历字符串s判断当前值是否是'0',如果是则leftScore加一分;如果不是则rightScore减一分;比较maxScore与leftScore+rightScore的值,并把大的赋值给maxScore
  • 第三步:最后返回maxScore
var maxScore = function(s) {
    let maxScore = 0
    let leftScore = 0
    let rightScore = 0
    for(let i = 0;i<s.length;i++){
        if(s[i]==='1'){
            rightScore++
        }
    }
    for(let i = 0;i<s.length-1;i++){
        if(s[i]==='0'){
            leftScore++
        }else{
            rightScore--
        }
        maxScore = Math.max(maxScore,leftScore+rightScore)
    }
    return maxScore
};


image.png


目录
相关文章
|
2天前
|
算法 JavaScript 前端开发
LZH 算法的模拟实现,JavaScript 版本
LZH 算法的模拟实现,JavaScript 版本
15 0
|
1天前
|
算法 安全
死锁相关知识点以及银行家算法(解题详细步骤)
死锁相关知识点以及银行家算法(解题详细步骤)
7 2
|
2天前
|
JavaScript 前端开发 算法
JavaScript的垃圾回收机制通过标记-清除算法自动管理内存
【5月更文挑战第11天】JavaScript的垃圾回收机制通过标记-清除算法自动管理内存,免除开发者处理内存泄漏问题。它从根对象开始遍历,标记活动对象,未标记的对象被视为垃圾并释放内存。优化技术包括分代收集和增量收集,以提升性能。然而,开发者仍需谨慎处理全局变量、闭包、定时器和DOM引用,防止内存泄漏,保证程序稳定性和性能。
17 0
|
2天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
2天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
11 0
|
2天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
2天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
24 1
|
2天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
2天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符