串的模式匹配算法
阿新 • • 發佈:2018-02-24
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;
}
}
優雅點
串的模式匹配算法