public static int KMPmatch(String source, String target) {
		if (source == null || target == null || source.length() < target.length()) {
			return -1;
		}
		if (target.equals("")) {
			return 0;
		}
		int[] next = KMP.CalNext(target);
		int i = 0, j = 0;
		while (i < source.length()) {
			if (source.charAt(i) == target.charAt(j)) {
				i++;
				j++;
				if (j == target.length()) {
					return i - j;
				}
			} else {
				if (next[j] == -1) {
					i++;
					j = 0;
				} else {
					j = next[j];
				}
			}
		}
		return -1;
	}