3 回答

TA贡献1797条经验 获得超4个赞
原问题: order of repetition does not matter
您可以用总字母数减去唯一字母的数量。set应用于字符串将返回唯一的字母集合。
x = "loooooveee"
res = len(x) - len(set(x)) # 6
或者您可以使用collections.Counter,从每个值中减去 1,然后sum:
from collections import Counter
c = Counter("loooooveee")
res = sum(i-1 for i in c.values()) # 6
新问题: repetitions must be sequential
您可以使用itertools.groupby对连续的相同字符进行分组:
from itertools import groupby
g = groupby("aooooaooaoo")
res = sum(sum(1 for _ in j) - 1 for i, j in g) # 5
为避免嵌套sum调用,您可以使用itertools.islice:
from itertools import groupby, islice
g = groupby("aooooaooaoo")
res = sum(1 for _, j in g for _ in islice(j, 1, None)) # 5

TA贡献1802条经验 获得超6个赞
我认为你的代码正在比较错误的东西
您首先找到最后一个字符:
char = text[-1]
然后将其与自身进行比较:
for i in range(1, len(text)):
if text[-i] == char: #<-- surely this is test[-1] to begin with?
为什么不直接遍历字符:
def measure_normalized_emphasis(text):
char = text[0]
emphasis_size = 0
for i in range(1, len(text)):
if text[i] == char:
emphasis_size += 1
else:
char = text[i]
return emphasis_size
这似乎有效。
添加回答
举报