暴力子字符串查找算法

/**
 * 暴力子字符串查找算法
 *
 * 将文本字符串中的每个位置都与模式字符串进行匹配,直到找出匹配的子串位置
 * */
public class BruteForce {

    /**
     * @param pattern 模式字符串
     * @param text 文本字符串
     * @return 找到匹配的子串,返回子串的起始位置,否则返回 -1
     * */
    public static int search(String pattern, String text) {
        int M = pattern.length();
        int N = text.length();
        for (int i = 0; i <= N - M; i++) {
            int j;
            for (j = 0; j < M; j++) {
                if (text.charAt(i + j) != pattern.charAt(j)) {
                    break;
                }
            }
            if (j == M) {
                return i;
            }
        }
        return -1;
    }
}

暴力子字符串查找算法的另一种实现方式:

    /**
     * 暴力子字符串查找算法,但采用回退指针 i 的方式
     * */
    public static int searchByBack(String pattern, String text) {
        int M = pattern.length();
        int N = text.length();
        int i, j;
        for (i = 0, j = 0; i < N && j < M; i++) {
            if (text.charAt(i) == pattern.charAt(j)) {
                j++;
            } else {
                i -= j;
                j = 0;
            }
        }
        if (j == M) {
            return i - M;
        }
        return -1;
    }
posted @ 2022-07-23 21:34  廖子博  阅读(76)  评论(0编辑  收藏  举报