Q:给定字符串str和s,判断s是否在str中出现,如果出现则返回第一次出现时的索引

朴素匹配(简单匹配)算法即暴力搜索,逐字符比较字符str[i]与s[j]是否相等,直至i或者j超出边界。

  1. int indexOfSubString(string& str, string& subStr){
  2. int n=str.length(), m=subStr.length();
  3. if(n < m){
  4. // 主串比子串短
  5. return -1;
  6. }
  7. else{
  8. int i=0, j=0;
  9. while(i+j<n && j<m){
  10. if(str[i+j] == subStr[j]){
  11. // 字符相同则同时前进一步,准备比较下一个字符
  12. j++;
  13. }
  14. else{
  15. // 字符不相同则j归零,子串重新匹配
  16. i++;
  17. j=0;
  18. }
  19. }
  20. if(j>=m){
  21. // 子串到达边界,证明子串存在于主串中
  22. return i;
  23. }
  24. else{
  25. return -1;
  26. }
  27. }
  28. }