我试着编写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
我知道JavaSPLIT()方法的时间复杂度是O(字符串长度)。上述代码对KMP实现有何公平性?
另外,如果我在一个模式匹配案例而不是KMP的面试中给出这个答案,是明智之举还是我只是在浪费机会?
最佳答案
编辑:我修正了以前的复杂度计算。
KMP实现以复杂的O(n+m)运行,其中n=StruthRethTh()和m=Tope.LimthH()。
你的算法也运行复杂的O(N+M),但它可以跳过正确的匹配,并产生错误的答案。
考虑这个测试用例:
String str = "apple-orange-apple-apple-apple-orange-apple";
String pattern = "apple";
你的代码产生4个事件。应该是5点吧?
这个案子:
String str = "appleappleappleapple";
String pattern = "apple";
我认为这并没有毁掉你的机会,因为它表明你能够用Java编写逻辑并提出解决方案。
祝你面试顺利。