您的位置:首页 > 职场人生

kmp算法&&学习感想

2016-12-18 16:02 483 查看

kmp

package 串的模式匹配;

/**
* Created by h on 16-12-18.
*/
public class Solution {

public int findAppearance(String A, int lena, String B, int lenb) {
int[] next = new int[lenb];
buildNext(next, B, lenb);
int i = 0;
int j = 0;
while (true) {
if (i == lena && j != lenb) {
break;
}
if (j == lenb) {
return i - j;
}
if (j < 0 || A.charAt(i) == B.charAt(j)) {
i++;
j++;
} else {
j = next[j];
}
}
return -1;
}

private void buildNext(int[] next, String P, int lenP) {
next[0] = -1;
for (int i = 1; i < lenP; i++) {
if (next[i-1] < 0 || P.charAt(i - 1) == P.charAt(next[i - 1])) {
next[i] = next[i - 1] + 1;
} else {
next[i] = 0;
}
}
//        for (int i:
//             next) {
//            System.out.print(i + " ");
//        }
//        System.out.println();

}

public static void main(String[] args) {
String A = "djkfkdjfkldjfldj";
int lenA = A.length();
String B = "fk";
int lenB = B.length();
System.out.println(new Solution().findAppearance(A, lenA,B,lenB));
}
}


学习感想

这个算法我在这两年里学习了四遍,现在可以快速地独立地手写。说明有时候要吃透一个知识点,要反反复复学习好几遍 ,很多以前会的东西,现在回头去看,居然可以有更深刻的理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp 面试 程序员面试