使用递归Python 3查找字符串中的所有子字符串

时间:2017-02-14 17:46:36

标签: python recursion

如何使用递归列出字符串中所有可能的子字符串? (没有循环)我知道你可以使用s [1:]来切断第一个位置和s [: - 1]来切断最后一个位置。到目前为止,我已经想出了这个:

def lst_substrings(s):
  lst = []
  if s == "":
    return lst
  else:
    lst.append(s)
    return lst_substrings(s[1:])

但这只会列出第一个位置切片的所有子串的列表

2 个答案:

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

编辑:Duh。刚刚意识到实际上同样的解决方案是由比我更快的人发布的。投票给他答案。我会留下这个,因为它更简洁一些,如果你想按子串长度对结果列表进行排序。使用len(item,item),即保留 - 符号,按升序排序。

这样做:

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', '']