需求

输入一个只有“0”和“1”组成的字符串,其长度不小于2,我们需要将其从某个位置分割成左右两个子串(子串的长度都大于0), 在左串中,每出现一个0,则计1分,在右串中,每出现一个1,则计1分,尝试编程计算出所有分割方案中最高可以得多少分, 并将分数返回。例如,如果输入“00111”,当分割的左子串为“00”,右子串为“111”时得分最高,为5分,我们需要返回5作为正确答案。

思路

根据题目中的要求,我们能够明确每次截取都可以将输入的字符串截取成两部分, 需要计算出左半部分子串中“0”的个数与右半部分子串中“1”的个数的和。因此,我们可以采用遍历的方式枚举所有可分割的情况, 对每种情况的得分进行计算,最终返回最大的得分。

实现

package chapter08

import "strings"

func maxScore(s string) (score int) {
    for i, _ := range s {
        l := s[0 : i+1]
        r := s[i+1:]
        result := strings.Count(l, "0") + strings.Count(r, "1")
        if result > score {
            score = result
        }
    }

    return
}