|
6鱼币
- // 返回子串T在主串S中第pos个字符之后的位置
- // 若不存在,则返回0
- // T非空,1 <= pos <= strlen(S)
- // 注意:我们这里为了表述方便,字符串使用了第一个元素表示长度的方式。
- int index( String S, String T, int pos )
- {
- int i = pos; // i用于主串S中当前位置下标
- int j = 1; // j用于子串T中当前位置下标
-
- while( i <= S[0] && j <= T[0] ) // i或j其中一个到达尾部即终止搜索!
- {
- if( S[i] == T[i] ) // 若相等则继续下一个元素匹配
- {
- i++;
- j++;
- }
- else // 若失配则j回溯到第一个元素从新匹配
- {
- i = i-j+2; // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
- j = 1;
- }
- }
-
- if( j > T[0] )
- {
- return i - T[0];
- }
- else
- {
- return 0;
- }
- }
复制代码
假设S[7] = Q,那么在i = 7, j = 2时候不匹配,所以 i = i - j + 2,所以 i = 7 - 2+2 =7
若在i = 8 ,j = 3时候不匹配那么i = 8 - 3 + 2=7怎么还是等于7
求解答i = i - j +2这一行代码的意思 |
-
如图
|