如何使用递归列出字符串中所有可能的子字符串? (没有循环)我知道你可以使用s [1:]来切断第一个位置和s [: - 1]来切断最后一个位置。到目前为止,我已经想出了这个:
def lst_substrings(s):
lst = []
if s == "":
return lst
else:
lst.append(s)
return lst_substrings(s[1:])
但这只会列出第一个位置切片的所有子串的列表
答案 0 :(得分:-1)
有趣的问题,这是我的解决方案 - 反馈意见。
var data = await Task.Run(() => CoreUtils.ToDataTable(itemsSource));
rptViewer.LocalReport.DataSources.Add(new ReportDataSource("MyData", data));
In [73]: lstSubStrings("Hey")
Out[73]: ['', 'y', 'H', 'Hey', 'He', 'e', 'ey']
答案 1 :(得分:-1)
这样做:
def lst_substrings(s):
lst = [s]
if len(s) > 0:
lst.extend(lst_substrings(s[1:]))
lst.extend(lst_substrings(s[:-1]))
return list(set(lst))
sub = lst_substrings("boby")
sub.sort(key=lambda item: (-len(item), item))
print(sub)
输出是:
['boby', 'bob', 'oby', 'bo', 'by', 'ob', 'b', 'o', 'y', '']