字符串匹配

普通优化版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function findSubStrIndex(str, subStr) {
/*
算法思想:
i:str的遍历索引,j:subStr的 遍历索引,
index:子串匹配的初始位置。

从第一个字符开始比对,如匹配,进入匹配模式(index!==-1),

匹配模式: 若 接下来的字符相等,那么,各自指针前进一个位置。
如不相等,退出匹配模式,重置,i=index+1, index=-1,j=0,

不匹配模式也即不相等,那么 i++

直到i++ 遍历结束。

返回值:如果subStr遍历结束,那么返回 index,否则返回-1


*/
let i = 0;

let j = 0;

let index = -1;

/*
这个暴力算法是否有些繁琐了呢?
描述一下
*/

while (i < str.length) {
// 进去匹配模式....
const isEqual = str[i] === subStr[j];
if (isEqual && index === -1) {
index = i;
i++;
j++;
// 匹配模式
} else if (index !== -1) {
// 匹配模式开启
if (isEqual) {
i++;
j++;
} else {
// 直接从下一位置开始匹配
i = index + 1;
j = 0;
index = -1;
}
} else {
// 未进入匹配模式
i++;
}

if (j === subStr.length) break;
}

return j === subStr.length ? index : -1;
}

console.log(findSubStrIndex("abbab", "bba"));

优化法


http://example.com/算法与数据结构/字符串匹配/
作者
chen heng cheng
发布于
2024年5月30日
许可协议