【LeetCode】分割字符串的最大得分 Java 题解
题目描述
给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。
「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。
复制代码
思路分析
今天的算法题目是字符串处理题目,题目容易理解,规定「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。我们首先可以使用朴素算法思想,将字符串分割为左右子串,枚举每一种情况,朴素算法的时间复杂度是 O(n * n)。
朴素算法的时间复杂度比较高,由于题目计算左 子字符串 0 的数量,右 子字符串中 1 的数量,我们可以进行一次遍历,统一 1 出现的次数,然后从左到右遍历,在左字符串中,统计 0 的数量,当遇到是 1 的时候,减少 1 的数量,然后累加求和。具体实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n), 空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/684a94ad6b1ce3a638b4a8eb1】。文章转载请联系作者。
评论