我可以生成复杂性的所有子串吗?为O(n ^ 2)

时间:2012-04-11 12:45:22

标签: java suffix-tree substring

目前我正在使用两个嵌套的for循环来生成字符串的所有子字符串。我听说过Suffix Tree,但AFAIK Suffix Tree生成的后缀不是子串。以下是我目前正在使用的代码 -

        String s = "abacbccca";
        int l = s.length();
        for (short c = 0; c < l; c++) {
            for (short r = 0; r < l - c; r++){
                Sting ss=s.substring(c, c + r + 1);                                        
                if(!t.contains(ss));
                    t.add(ss);
            }
        }

我想要一种能够生成小于O(n^2)的所有子串的方法。虽然通过查看我的代码,任何人都可以建议我这是不可能的,因为我将每个子字符串添加到列表中。但我的目标不是存储所有的子串,我的目标是找到一个字典,字典是字符串。

1 个答案:

答案 0 :(得分:13)

O(n^2)个不同的子字符串,因此没有算法可以枚举它们,其复杂度优于O(n^2)

但是,找到按字典顺序排列的最小子字符串的问题是完全不同的。它始终是空字符串,因此这是一个O(1)操作(也是一个非常无意义的操作)。