串的模式匹配算法

Posted optor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串的模式匹配算法相关的知识,希望对你有一定的参考价值。

尴尬啊,大学数据结构课程用的书看到了现在。说起来这本书在业内也是相当有名,它就是清华大学出版社出版的《数据结构(C语言版)》。在该书的 4.3 节,讲解了“串的模式匹配算法”,个人感觉这一节应该是前四章最值得看的一节了。下面就说说相关算法的爪哇实现吧!

简单粗暴

首先,肯定还是说最简单最暴力的方法喽,没废话就是从前向后遍历:

/**
 * Cerated by clearbug on 2018/2/23.
 *
 * 串的模式匹配算法
 */
public class SubStrMatcher {

    public static void main(String[] args) {
        System.out.println(indexForce("ababcabcacbab", "abcac", 5));
        System.out.println(indexForce("00000000000000000000000000000000000000000000000001", "0000000001", 0));
    }

    /**
     * 朴素字符串匹配算法
     *
     * @param s 主串
     * @param t 模式串
     * @param pos 匹配操作起始位置
     * @return 若模式串匹配不成功,则返回 -1;否则,返回主串中第一次匹配成功的子串的索引值;
     */
    public static int indexForce(String s, String t, int pos) {
        char[] sArr = s.toCharArray();
        char[] tArr = t.toCharArray();

        int sLen = sArr.length;
        int tLen = tArr.length;
        int i = pos, j = 0;
        while (i < sLen && j < tLen) {
            if (sArr[i] == tArr[j]) {
                i++;
                j++;
            } else {
                i = i -j + 1;
                j = 0;
            }
        }
        if (j == tLen) { // 匹配成功了
            return i - j;
        }
        return -1;
    }
}

优雅点

以上是关于串的模式匹配算法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—串KMP模式匹配算法

《数据结构(C语言版)》之“串的模式匹配算法”

求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法

第四章学习小结 串的模式匹配 解题心得体会

串的两种模式匹配算法

4.2 串的模式匹配算法