KMP的Java实现

来源:互联网 发布:网络摄像头id 编辑:程序博客网 时间:2024/05/20 08:27
package leetcode;public class Solution {    public boolean isSubString(String origin, String subString) {        int[] next = getNext(subString);        for(int i = 0, j = 0; i < origin.length();) {            if(origin.charAt(i) == subString.charAt(j)) {                ++i;                ++j;                if(j == subString.length()) return true;            } else {                if(j == 0) {                    ++i;                } else {                    j = next[j-1];                }            }        }        return false;    }    public int[] getNext(String str) {        int[] next = new int[str.length()];        next[0] = 0;        int k = 0;        for(int i = 1; i < str.length(); ++i) {            while (k > 0 && str.charAt(i) != str.charAt(k))                k = next[k-1];            if(str.charAt(k) == str.charAt(i)) ++k;            next[i] = k;        }        return next;    }    public static void main(String[] args) {        Solution solution = new Solution();        String origin = "ababxbababcadfdsss";        String substring = "ababcad";        System.out.println(solution.isSubString(origin, substring));    }}
原创粉丝点击