java – 如何知道一个字符串是否可以分割成两个字符串

我在面试中被问到这个问题.我不知道如何处理这个问题.请指导我

问题:如何知道一个字符串是否可以分割成两个字符串 – 如breadbanana是可分割成面包和香蕉,而breadbanan不是.你会得到一个包含所有有效单词的字典.

在字典中创建一个trie字,这样可以更快地搜索.
根据输入字符串的以下字母搜索树.当你找到一个单词,它在树中时,从输入字符串中该单词之后的位置递归地开始.如果你到达输入字符串的末尾,你会发现一个可能的碎片.如果你被卡住了,回来再递交一遍再试一次.

编辑:对不起,错过了一个事实,一定只有两个字.
在这种情况下,将递归深度限制为2.

2个字的伪代码将是:

T = trie of words in the dictionary
for every word in T, which can be found going down the tree by choosing the next letter of the input string each time we move to the child:
    p <- length(word)
    if T contains input_string[p:length(intput_string)]:
        return true
return false

假设你可以下载到O(1)中的小节点(小孩的ascii索引)中,可以在O(np)中找到输入字符串的所有前缀,其中p是前缀的数量,n输入长度.上限是O(n m),其中m是字典中的单词数.检查包含将取O(w),其中w是字的长度,上限为m,因此算法的时间复杂度为O(nm),因为O(n)分布在第一阶段所有发现的词之间.

但是因为在第一阶段我们找不到n个以上的词,所以复杂性也限于O(n ^ 2).
因此,搜索复杂度将为O(n * min(n,m))
在此之前,您需要构建将采取O(s)的特技,其中s是字典中单词长度的总和.其上限为O(n * m),因为每个单词的最大长度为n.

翻译自:http://stackoverflow.com/questions/15241300/how-to-know-whether-a-string-can-be-segmented-into-two-strings

转载注明原文:java – 如何知道一个字符串是否可以分割成两个字符串