我的方法是:遍历字符串并记住最后一个字符。如果当前字符与最后一个字符相同,则稍作特殊处理。代码如下:
s = 'aaabcdedddd'
out = []
last = None
for current in s:
if current == last:
# 当前字符与上一个字符相同时的情况
out.pop() # 移除上一个字符
current = current * 2 # 将当前字符加倍
out.append(current)
last = current
print(out)
输出:
['aa', 'a', 'b', 'c', 'd', 'e', 'dd', 'dd']
更新:
感谢Kelley Bundy的评论,指出之前的代码可能会产生误导。我对自己的方法进行了反思并提出了一个更简洁的方案:
s = 'aaabcdedddd'
out = []
for current in s:
if out and current == out[-1]:
out[-1] = current * 2
else:
out.append(current)
print(out)
这次的算法是:对于每个字符,如果它与已添加到输出列表(即 out
变量)中的最后一个字符相同,则将其加倍。否则,直接将其添加到列表中。