我正在寻找一种从句子中获取所有字符串拆分组合的方法。 例如,对于输入语句:
"I am eating pizza"
我想得到这个输出:
[["I", "am", "eating", "pizza"],
["I", "am eating", "pizza"],
["I", "am", "eating pizza"],
["I", "am eating pizza"],
["I am", "eating", "pizza"],
["I am", "eating pizza"],
["I am eating", "pizza"],
["I am eating pizza"]]
我找不到执行此操作的递归方法!你有什么主意吗 ? 这不是重复的:我不是在寻找整个组合,只是在寻找有序的项目,而且总是在寻找整个单词。无法从所谓的重复项中找到我的答案。
最佳答案
分割和重现
这里有一种使用递归函数的方法——以及我是如何进行设计的:
- 使用索引
i
扫描字符串s
- 如果索引越界,返回基础结果,
[[s]]
,否则... - 如果在索引处找到
""
,将问题分割为A和B两部分并合并它们的结果,否则前进到下一个索引。 - A 部分:在此空间上拆分,在递归结果中的每个项目之前添加单词。
- B 部分:不在此空间上拆分,前进到下一个索引
# split :: String -> [[String]]
def split (s, i = 0):
if len(s) == i:
return [[s]]
elif s[i] == " ":
# Part A # Part B
return [[s[0:i]] + acc for acc in split(s[i + 1:])] + split(s, i + 1)
else:
return split(s, i + 1)
print(split("i am eating pizza"))
# [ ['i', 'am', 'eating', 'pizza'],
# , ['i', 'am', 'eating pizza']
# , ['i', 'am eating', 'pizza']
# , ['i', 'am eating pizza']
# , ['i am', 'eating', 'pizza']
# , ['i am', 'eating pizza']
# , ['i am eating', 'pizza']
# , ['i am eating pizza']
# ]
关于python - 查找所有字符串拆分组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907585/