方法一 暴力枚举
枚举所有分割点的情况,取最大得分
var maxScore = function(s) {let res = 0;const n = s.length;for (let i = 1; i < n; i++) {let score = 0;for (let j = 0; j < i; j++) {if (s[j] === '0') {score++;}}for (let j = i; j < n; j++) {if (s[j] === '1') {score++;}}res = Math.max(res, score);}return res;
};
消耗时间和内存情况:
方法二 两次遍历:
第一次遍历找出1的数量,第二次循环找所以分割点,如果把0分到左边,左边分数+1,右边不变,把1分到左边,左边分数不变,右边分数-1,看左右分数之和是否大于max
var maxScore = function(s) {let max=-1,score0=0,score1=0for(let char of s){if(char==='1'){score1++}}if(score1===0) return s.length-1for(let i=0 ;i<s.length-1;i++){if(s[i]==='0'){score0++}else{score1--}if(score0+score1>max){max=score0+score1}}return max
};
消耗时间和内存情况: