方法一 暴力枚举
枚举所有分割点的情况,取最大得分
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=0
for(let char of s){
if(char==='1'){
score1++
}
}
if(score1===0) return s.length-1
for(let i=0 ;i<s.length-1;i++){
if(s[i]==='0'){
score0++
}else{
score1--
}
if(score0+score1>max){
max=score0+score1
}
}
return max
};
消耗时间和内存情况: