朴素

有字符串AABCDEF

输入: AAF 输出: true

输入: AFE 输出: false

    public static boolean match(String target, String input) {
        if (input == null || "".equals(input)
                || target == null || "".equals(target)) return false;
        if (target.length() < input.length()) return false;

        int i = 0, j = 0;
        while (i < target.length() && j < input.length()) {
            if (target.charAt(i) == input.charAt(j)) {
                i++;
                j++;
            } else {
                i++; // 不相等主串向后移动
            }
        }
        if (j >= input.length()) {
            return true;
        }
        return false;
    }

输入: AAF 输出: false

输入: ABC 输出: true

    public static boolean match2(String target, String input) {
        if (input == null || "".equals(input)
                || target == null || "".equals(target)) return false;
        if (target.length() < input.length()) return false;

        int i = 0, j = 0;
        while (i < target.length() && j < input.length()) {
            if (target.charAt(i) == input.charAt(j)) {
                i++;
                j++;
            } else {
                i = i-j+1;// 当前位置-匹配成功个数 + 1 = 上次开始匹配的下一个字符
                j = 0;

            }
        }
        if (j >= input.length()) {
            return true;
        }
        return false;
    }
aaaaaaaaaaaaaaaaaaab
aaaab

i=4 j=4 
i=i-j+1 --> 4- 4 + 1  j=0

aaaaaaaaaaaaaaaaaaab
 aaaab
i=5 j=4 
i=i-j+1 --> 5- 4 + 1  j=0

aaaaaaaaaaaaaaaaaaab
  aaaab

 ....

aaaaaaaaaaaaaaa aaaab  	m
			    aaaab	n

前面匹配都失败了 (m - n)  * n 加上最后一次匹配成功的 n
O(m - n + 1) * n

KMP

…TODO