1422分割字符串的最大得分
题目

这道题我这里有三个解法,我最开始只想到使用遍历计数的方式去做
- 方法一:
时间复杂度很高,这里用到一个数组进行分数统计,然后排序后取最大值
class Solution:
def maxScore(self, s: str) -> int:
arr = []
for i in range(1, len(s)):
l = s[:i]
r = s[i:]
l_n = 0
r_n = 0
for j in l:
if int(j) == 0:
l_n += 1
for j in r:
if int(j) == 1:
r_n += 1
arr.append(l_n + r_n)
arr.sort()
return arr[-1]
- 方法二
根据方法一我们或许可以优化一下
这个方法调用了python的内置函数max,和count对数据进行统计筛选,避免了我们在方法一中进行这些步骤
class Solution:
def maxScore(self, s: str) -> int:
return max(s[:i].count("0") + s[i:].count("1") for i in range(1, len(s)))
- 方法三
如果我们换一个思路,这个字符串中只有0和1这两种值,并且被切割为左右两个字符串,字符串也不能为空,那么我们取一个极限切割的位置,比如,最左边的切割点。这时候左字符串只有一个字符,右字符串有len(s)-1个字符,这时候左右得分相加就可以得到一个对比基数值。如果我们遍历右边字符串,模拟把右边的字符逐个传递给左边,如果为0,则加一,否在减一,最后我们把最终得值与基数值对比,就可以得到我们需要的数据。
class Solution:
def maxScore(self, s: str) -> int:
l = r = s[0].count('0') + s[1:].count('1')
for i in s[1:-1]:
l += 1 if i == '0' else -1
r = max(l, r)
return r

浙公网安备 33010602011771号