一、问题描述
假设字符串A: "abcababcabc"
字符串B:"abcabc"
因为字符串A中有一部分和B相同,则称字符串B为字符串A的子串
二、BF算法
用i 和 j 分别表示字符串AB的下标,初始值都为0。
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
字符串A | a | b | c | a | b | a | b | c | a | b | c |
i | |||||||||||
字符串B | a | b | c | a | b | c | |||||
j |
1、首先字符串A从头开始,判断往后strlen(B)个字符串是否和字符串B相等;
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
字符串A | a | b | c | a | b | a | b | c | a | b | c |
i | |||||||||||
字符串B | a | b | c | a | b | c | |||||
j |
2、当走到下标为5的时候,字符串A B失配,则说明字符串A从下标为0开始的子串与B不相同,既然从下标为0开始没有,那就i回退到1(即回退了i - j + 1),j回退到0,再次进行匹配
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
字符串A | a | b | c | a | b | a | b | c | a | b | c |
i | |||||||||||
字符串B | a | b | c | a | b | c | |||||
j |
3、当i为1,j为0是还是失配,i接着回退i - j + 1 &