CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,传送门:https://checkio.org/,本博客主要记录自己在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。
题目描述
【Long Repeat】:给定一个字符串,找到字符串中最长的相同字符重复出现的次数,并返回它的重复次数。例如:字符串“aaabbcaaaa”包含具有相同字母“aaa”,“bb”,“c”和“aaaa”的四个子字符串。 最后一个子字符串是最长的一个字符串,你应该返回 4 。
【输入】:一个字符串
【输出】:一个整数
【范例】:
long_repeat('sdsffffse') == 4
long_repeat('ddvvrwwwrggg') == 3
解题思路
遍历字符串,如果前一个字符与后一个字符相同,就将其出现的次数加一,同时,每次遍历都用 max()
方法记录字符出现次数最多的
代码实现
def long_repeat(line: str) -> int:
new_string = ''
num = 0
max_num = 0
for string in line:
if string != new_string:
new_string = string
num = 1
else:
num += 1
max_num = max(max_num, num)
return max_num
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert long_repeat('sdsffffse') == 4, "First"
assert long_repeat('ddvvrwwwrggg') == 3, "Second"
assert long_repeat('abababaab') == 2, "Third"
assert long_repeat('') == 0, "Empty"
print('"Run" is good. How is "Check"?')
大神解答
大神解答 NO.1
from itertools import groupby
def long_repeat(line):
return max((sum(1 for _ in g) for k, g in groupby(line)), default=0)
大神解答 NO.2
def long_repeat(line):
m=0
p=0
for x in range(len(line)):
if x<len(line)-1:
if line[x]==line[x+1]:
p+=1
else:
p=0
if p+1>m:
m=p+1
return m