① 先需要计算出字符串第二个字符到末尾的1的数目,然后判断字符串的第一个字母是0还是1来计算出字母0的数目,所以通过1次的for循环我们可以知道第一个字母与第二个字母到末尾的0与1对应的数目总和,可以使用两个变量来记录0与1的字母变化,可以使用另外一个for循环来模拟分割字符串的过程,这个for循环从字符串的第二个字母开始,分别判断是0还是1来确定是否更新当前分割的字符串的0与1的数目,根据当前的0与1的数目与历史的最大值来确定是否更新最大值,这样使用两个for循环就可以模拟整个的字符串的分割过程
② 需要注意的是左边界最多到字符串的长度减1的位置
class Solution {
public int maxScore(String s) {
if (s == null || s.length() == 0) {
return 0;
}
int zero = 0, one = 0;
if (s.charAt(0) == '0') zero++;
for (int i = 1; i < s.length(); i++) {
int n = s.charAt(i) - '0';
if (n == 1) {
one++;
}
}
int max = zero + one;
for (int i = 1; i < s.length()-1; i++) {
int n = s.charAt(i) - '0';
if(n==0) {
zero++;
}else if(n==1){
one--;
}
max = Math.max(max,zero+one);
}
return max;
}
}