1. 程式人生 > >串的模式匹配算法

串的模式匹配算法

char bst tar 個人 ray args ababc rate cnblogs

尷尬啊,大學數據結構課程用的書看到了現在。說起來這本書在業內也是相當有名,它就是清華大學出版社出版的《數據結構(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; } }

優雅點

串的模式匹配算法