测试用例 输入:abbbaaccada 输出:ccada 输入:bbccdddcb 输出:(空字符串)
str = input("Enter string: ")
def my_string(string):
if not string:
return ""
if len(string) == 1:
return string
if string[0] == string[1] == string[2]:
return my_string(string[3:])
return string[0] + my_string(string[1:])
print (my_string(str))
我是python的新手。而我正在尝试删除字符串中连续出现3个或更多字符的字符。在这里,我只能得到只有1次迭代的输出。例如i / p- hhhelllo o / p-eo但是对于i / p- abbbaaccada o / p是aaaccada但它应该是ccada ..请帮助..
我做了这个直到3次重复,但是如何将它推广超过3次重复。??
答案 0 :(得分:3)
您的问题提供了展示else
循环中的for
如何有用的机会。看看:
def remover(my_str):
temp = set(my_str)
while True:
for c in temp:
if 3*c in my_str:
my_str = my_str.replace(3*c, '')
break
else:
break
return my_str
test1 = 'abbbaaccada'
print(remover(test1)) # -> ccada
test2 = 'i/p- hhhelllo'
print(remover(test2)) # -> i/p- eo
如果您坚持进行递归调用,可以按如下方式修改上述内容:
def remover(my_str):
temp = set(my_str)
new_str = my_str
for c in temp:
if 3*c in new_str:
new_str = new_str.replace(3*c, '')
if my_str == new_str:
return new_str
else:
return remover(new_str)
答案 1 :(得分:1)
我添加了一个可以重复3次或更多次的解决方案,因为上述解决方案对我不起作用。这是一种递归解决方案。
import re
def format_string(u_str):
f_str = remove_string(u_str)
if f_str == u_str:
return f_str
else:
return format_string(f_str)
def remove_string(u_str):
index = 0 # This will maintain the index while traversing the entire string
while index < len(u_str):
r = re.search(u_str[index]*4 + '*', u_str)
if r:
start, end = r.span() # start and end index of substring matching 3 or more repetition
u_str = u_str[:start] + u_str[end:] # removing the found substring
index = end
else:
index += 1
return u_str
test1 = 'abbbaaccada'
print('output:' + format_string(test1))
test2 = 'bbccdddcb'
print('output:' + format_string(test2))