思路一:常规暴力做法,直接按要求去分割字符串然后求得分值,最后比较求出最大的得分值即可。
代码如下:
class Solution {
public:
//暴力求解、对于所有的情况按题要求拆分进行最大值的获取
int maxScore1(string s) {
int size=s.length();
int max_score=0;
for(int i=1;i<size;i++){
string s1=s.substr(0,i);//取左边的字符串
string s2=s.substr(i,size-i);//取右边的字符串
max_score=max(max_score,sum(s1,s2));//取最大值
}
return max_score;
}
//获得分值和
int sum(string s1,string s2){
int total=0;
for(int i=0;i<s1.length();i++){
if(s1[i]=='0') total++;
}
for(int i=0;i<s2.length();i++){
if(s2[i]=='1') total++;
}
return total;
}
};
思路二:得到字符串中1的个数,用left来记左边得分值,用right记右边得分值(初试为字符串中1的个数),依次再遍历字符串中字符,如果当前字符为'0' 则left++,如果为'1',则right--;
代码如下:
class Solution {
public:
//非暴力求解
int maxScore(string s) {
int size=s.length();
int right=0,left=0;
//统计整个字符串中'1'的个数
for(int i=0;i<size;i++){
if(s[i]=='1') right++;
}
int max_score=0;
//依次遍历,从第一个开始作为左边的,如果为0,left++,如果为1,right--
for(int i=0;i<size-1;i++){
if(s[i]=='0') left++;
else right--;
max_score=max(max_score,left+right);//取每次之后的最大值
}
return max_score;
}
};