这种模式发现方法是否优于KMP或Z-Algorithm实现?

时间:2017-02-11 09:24:50

标签: java algorithm pattern-matching

我正在尝试编写KMP算法代码。完成后,我尝试使用java字符串方法。以下是我的实施方式:

String str = "This is easier version of fist";
    String pattern = "is";
    String[] splitStr = str.split(pattern);
    System.out.println("Total occurence of the given pattern in the given string is ="
            +(splitStr.length-1));
    int i=1, count=0;
    for(String st: splitStr){
        if(i<splitStr.length){
        count += st.length();
        System.out.println("Occurence of "+i+" pattern is at index "+count);
        count+=pattern.length();
        i++;
        }
    }

我得到以下输出:

Total occurence of the given pattern in the given string is =3
Occurence of 1 pattern is at index 2
Occurence of 2 pattern is at index 5
Occurence of 3 pattern is at index 27

我知道java split()方法的时间复杂度是O(字符串长度)。上述代码如何对KMP实施公平? 另外,如果我在面试模式匹配案例而不是KMP的情况下给出这个答案,那么这是明智的做法,还是我只是把握机会?

1 个答案:

答案 0 :(得分:1)

编辑:我修复了之前的复杂度计算。

KMP实现以复杂度O(n + m)运行,其中n = str.length(),m = pattern.length()。

您的算法也以复杂度O(n + m)运行,但它可以跳过正确匹配并产生错误答案。

考虑这个测试用例:

String str = "apple-orange-apple-apple-apple-orange-apple";
String pattern = "apple";

您的代码产生了4次出现。它应该是5对吗?

这个案子:

String str = "appleappleappleapple";
String pattern = "apple";

我认为它没有把握机会,因为它表明你能够用Java编写逻辑代码并提出解决方案。

祝你好运。