我正在尝试解决这个问题
实现功能 substring ,该函数接受 string 并返回其所有可能的子字符串。 如果(1)?为空字符串,或者(2)?中的所有字符,则字符串?是字符串?的子字符串。 以?及其相对的左右顺序出现。我们假设原始字符串? 不含任何重复的字符。
例如,
>>>substring('a')
['', 'a']
>>> substring('abc')
['', 'c', 'b', 'bc', 'a', 'ac', 'ab', 'abc']
您必须使用以下代码
def substring(S):
if S ==[]:
else:
我最近才了解递归,并尝试使用此代码。
def substring(S):
if S ==[]:
return ['']
else:
return[substring(S[1:])]+[substring(S[0])]
我该如何解决这个问题,我有什么建议可以解决这些类型的问题?
更新:阅读评论和答案后,我可以得到的答案如下。但是,此代码的基本情况是S == ''
,而不是问题中必需的S == []
。
def substring(S):
if S =='':
return ['']
else:
return substring(S[1:])+[S[0] + i for i in substring(S[1:])]
@Primusa感谢您的建议!
答案 0 :(得分:-1)
不确定您的任务是什么,但是我不建议在这里递归。这是一个简单的代码(另请参阅@chepner的注释)
S = 'abc'
l = list(S)
result = []
for n in range(2**len(l)):
result.append(''.join([l[i] for i in range(len(l)) if 2**i & n > 0]))
print(result)