1.BF算法

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "string.h"
    4. // 返回子串T在主串S中的位置
    5. // 若不存在,则返回0
    6. // T非空,1 <= strlen(S)
    7. int index( char* S, char* T)
    8. {
    9. int i = 0; // i用于主串S中当前位置下标
    10. int j = 0; // j用于子串T中当前位置下标
    11. while( i <= strlen(S) && j < strlen(T) ) // i或j其中一个到达尾部即终止搜索!
    12. {
    13. if( S[i] == T[j] ) // 若相等则继续下一个元素匹配
    14. {
    15. i++;
    16. j++;
    17. }
    18. else // 若失配则j回溯到第一个元素从新匹配
    19. {
    20. i = i-j+2; // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!
    21. j = 0;
    22. }
    23. }
    24. if( j >= strlen(T) )
    25. {
    26. return i - strlen(T);
    27. }
    28. else
    29. {
    30. return -1;
    31. }
    32. }
    33. int main()
    34. {
    35. int a;
    36. char* S = "012345rtyuio";
    37. char* T = "rtyu";
    38. a = index(S,T);
    39. printf("%d",a);
    40. return 0;
    41. }

    image.png