携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
2 <= s.length <= 500- 字符串
s仅由字符'0'和'1'组成。
二、思路分析:
我们读取本题,题目内容要求对字符串按照左字符串和右字符串划分,计算出分割字符串最大得分。那么左字符串和右字符串是怎么划分,我们继续审题:
- 字符串s是由 0 和 1组成
- 左字符串和右字符串分割成两个非空字符串
- 左子字符串中只计算字符0的数量
- 右子字符串中只计算字符1的数量
根据题目内容,我们可以直接使用模拟方法,解答即可:
-
方法一:模拟方法
- 字符串s进行分片,左子字符串s[:i],右子符串s[i:]
- 左子字符串s[:i].count("0")
- 右子字符串s[i:].count("1")
class Solution(object): def maxScore(self, s): """ :type s: str :rtype: int """ ans = 0 for i in range(1,len(s)): left = s[:i].count("0") right = s[i:].count("1") Sum = left + right ans = max(ans,Sum) return ans
-
方法二:两次遍历
- 第一次遍历求出左子字符串中只有一个字符时,右子字符串1的次数,赋值给ans和tmp
- 第二次遍历s字符串从[1:-1],左字符串开始取值
- 当s[i] == "0",则最大数tmp +1
- 当s[i] == "1",则最大数tmp -1
class Solution(object): def maxScore(self, s): """ :type s: str :rtype: int """ score1 = s[1:].count("1") score0 = 1 if s[0] == "0" else 0 tmp = ans = score0 + score1 for i in s[1:-1]: if i == "0": tmp +=1 else: tmp -=1 ans = max(ans,tmp) return ans
三、总结:
本题考察字符串分割遍历,在该题中最优解中可以使用两个for循环,AC提交记录如下:
- 时间复杂度:O(n),n是字符串s的长度
- 空间复杂度:O(1),没有使用额外空间
以上是本题内容,欢迎大佬们点赞评论,下期见~~~