尴尬啊,大学数据结构课程用的书看到了现在。说起来这本书在业内也是相当有名,它就是清华大学出版社出版的《数据结构(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;
}
}