查找包含所有给定字符串的最小长度子字符串

约翰·罗伯茨

给定一个大文档和一个由几个单词组成的短模式(例如W1 W2 W3),找到具有所有顺序的所有单词的最短字符串(例如W2 foo bar dog W1 cat W3-是有效模式)

我将“大文档”构造为字符串列表。我相信我的解决方案是O(nlog(n)),但是我不确定(我也不知道它是否正确)。有没有更快的方法?请注意,下面是伪编码的Java,因此显然不会编译,但是我相信消息很清楚:

main(){
    List<String> wordsToCheckFor;
    List<String> allWords;
    int allWordsLength = allWords.length;
    int minStringLength = POS_INFINITY;
    List<String> minString;

    //The idea here is to divide and conquer the string; I will first
    //check the entire string, then the entire string minus the first
    //word, then the entire string minus the first two words, and so on...

    for(int x = 0; x < allWordsLength; x++){
        if(checkString(allWords, wordsToCheckFor) && (allWords.length < minStringLength)){
            minString = allWords;
            minStringLength = allWords.length();
        }   
        allWords.remove(0);
    }

    System.out.println(minString);          
}


checkString(List<String> allWords, List<String> wordsToCheckFor){
    boolean good = true;
    foreach(String word : wordsToCheckFor){
        if(!allWords.contains(word))
            good = false;
    }
    return good;
}
克拉斯科维奇

您的解决方案具有O(n ^ 2)时间复杂度(在最坏的情况下,每个后缀都被检查,并且每个检查都为O(n),因为List.contains方法具有线性时间复杂度)。而且,这是不正确的:答案并不总是后缀,它可以是任何子串。

一种更有效的解决方案:逐字遍历您的文本,并跟踪模式中每个单词的最后一次出现(例如,使用哈希表)。每次迭代后更新答案(候选子字符串是从模式中所有单词中最小的最后出现到当前位置的子字符串)。该解决方案具有线性时间复杂度(假设模式中的单词数为常数)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用O(n)中的哈希表在字符串S中查找包含字符串T中所有字符的最小长度子字符串

来自分类Dev

在字符串数组中查找包含子字符串的所有字符串

来自分类Dev

在字符串数组中查找包含子字符串的所有字符串

来自分类Dev

使用散列查找具有最小总长度的字符串子数组,其中包含原始数组中的所有不同字符串

来自分类Dev

查找给定字符串的所有子序列

来自分类Dev

寻找包含所有不同输入字符串的连续子系列的最小长度

来自分类Dev

查找所有长度的字符串

来自分类Dev

使用grep查找可能包含特殊字符的字符串的所有子字符串

来自分类Dev

查找给定字符串中所有子字符串的出现

来自分类Dev

查找给定字符串中所有子字符串的出现

来自分类Dev

如何查找不包含子字符串回文的所有字符串

来自分类Dev

查找包含较大字符串中给定字母集的最小子字符串

来自分类Dev

从给定列表中查找包含子字符串的字符串

来自分类Dev

给定字符串A与长度| A |的子字符串的所有汉明距离的总和 另一个字符串B

来自分类Dev

查找CSV中所有行的最小字符串长度并打印

来自分类Dev

PHP删除所有包含给定字符串的文件

来自分类Dev

查找不包含整个字符集的所有子字符串

来自分类Dev

Bash-如何查找和删除包含给定字符串的所有文件?

来自分类Dev

查找字符串中包含的所有子字符串的最快方法是什么?

来自分类Dev

查找长度为n的所有可能的子字符串

来自分类Dev

对于给定且唯一的字符串,如何查找所有对应的字符串

来自分类Dev

对于给定且唯一的字符串,如何查找所有对应的字符串

来自分类Dev

如何从给定数组中选择包含子字符串的所有条目?

来自分类Dev

程序打印给定字符串的所有子字符串

来自分类Dev

以字母顺序生成给定字符串的所有子字符串(按字典顺序)

来自分类Dev

Solr-搜索给定字符串的所有子字符串

来自分类Dev

如何查找所有包含字符串的文件?

来自分类Dev

查找包含所有字符串的行

来自分类Dev

如何查找包含特定字符串的所有域

Related 相关文章

  1. 1

    使用O(n)中的哈希表在字符串S中查找包含字符串T中所有字符的最小长度子字符串

  2. 2

    在字符串数组中查找包含子字符串的所有字符串

  3. 3

    在字符串数组中查找包含子字符串的所有字符串

  4. 4

    使用散列查找具有最小总长度的字符串子数组,其中包含原始数组中的所有不同字符串

  5. 5

    查找给定字符串的所有子序列

  6. 6

    寻找包含所有不同输入字符串的连续子系列的最小长度

  7. 7

    查找所有长度的字符串

  8. 8

    使用grep查找可能包含特殊字符的字符串的所有子字符串

  9. 9

    查找给定字符串中所有子字符串的出现

  10. 10

    查找给定字符串中所有子字符串的出现

  11. 11

    如何查找不包含子字符串回文的所有字符串

  12. 12

    查找包含较大字符串中给定字母集的最小子字符串

  13. 13

    从给定列表中查找包含子字符串的字符串

  14. 14

    给定字符串A与长度| A |的子字符串的所有汉明距离的总和 另一个字符串B

  15. 15

    查找CSV中所有行的最小字符串长度并打印

  16. 16

    PHP删除所有包含给定字符串的文件

  17. 17

    查找不包含整个字符集的所有子字符串

  18. 18

    Bash-如何查找和删除包含给定字符串的所有文件?

  19. 19

    查找字符串中包含的所有子字符串的最快方法是什么?

  20. 20

    查找长度为n的所有可能的子字符串

  21. 21

    对于给定且唯一的字符串,如何查找所有对应的字符串

  22. 22

    对于给定且唯一的字符串,如何查找所有对应的字符串

  23. 23

    如何从给定数组中选择包含子字符串的所有条目?

  24. 24

    程序打印给定字符串的所有子字符串

  25. 25

    以字母顺序生成给定字符串的所有子字符串(按字典顺序)

  26. 26

    Solr-搜索给定字符串的所有子字符串

  27. 27

    如何查找所有包含字符串的文件?

  28. 28

    查找包含所有字符串的行

  29. 29

    如何查找包含特定字符串的所有域

热门标签

归档