我需要编写一个名为removeDuplicate(string)
的函数,只有字符串作为参数。它必须删除所有相邻的重复项。它也必须是递归的。这就是我到目前为止所做的:
def stringClean(string):
if len(string) == 0:
return ""
elif len(string) == 1:
return string[0] + string[1:]
else:
if string[0] == string[1]:
return string[0] + stringClean(string[2:])
else:
return string[0] + stringClean(string[1:])
print stringClean('Hello') #returns Helo
我的问题是它只适用于只有两个相邻重复项的情况。输入'你好'正确地回归' helo'但输入' helllo'或者' hellllo'将返回'你好'而不是' helo'。
答案 0 :(得分:4)
这将完成这项工作:
def stringClean(string):
if not string:
return ""
if len(string) == 1:
return string
if string[0] == string[1]:
return stringClean(string[1:])
return string[0] + stringClean(string[1:])
print stringClean('HHHelllo') #returns Helo
关于你的代码,如果string的长度为1,则不需要返回string[0] + string[1:]
。因为在这种情况下它只包含一个char,所以你只需返回char。现在,如果string[0] == string[1]
,那么你想忽略第一个字符并在其余字符上应用该函数。
答案 1 :(得分:0)
def removeConsecutiveDuplicates(string):
if len(string)==0 or len(string)==1:
return string
if string[0]==string[1]:
smaller=string[1:]
smallout=removeConsecutiveDuplicates(smaller)
return smallout
else:
smaller=string[1:]
smallout=removeConsecutiveDuplicates(smaller)
return string[0]+smallout
string = input().strip()
print(removeConsecutiveDuplicates(string))
答案 2 :(得分:-1)
删除相邻重复项的一种方法是使用正则表达式:
word="abbababbb"
import re
while(re.search(r'([a-z])\1{1}',word)):
word=(re.sub(r'([a-z])\1{1}',r'',word))
print(word)
输出:
bab