用于递归删除字符串中的相邻重复项的函数

时间:2017-03-21 21:47:10

标签: python python-2.7 recursion

我需要编写一个名为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'。

3 个答案:

答案 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