Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13985
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-04 14:30
个人简介

programmer and engineer

文章分类

全部博文(7)

文章存档

2013年(7)

我的朋友

分类: C/C++

2013-03-05 17:09:47

strstr是很常用的C库函数,用来在一个字符串中查找一个子字符串是否存在,若存在则返回起点,若不存在则返回NULL。

这题有很多中解法,最直观的方法就是做穷举字符串搜索,复杂度为O(MN)。其中一个小优化技巧就是在外循环中不需要搜索整个字符串,只需循环N-M+1次即可,因为若N-M此之后还未找到匹配,则剩下的长M-1的字符串不需要匹配,因为其长度小于子字符串。

如下:

 

   1: class Solution {
   2:     public:
   3:         char *strStr(char *haystack, char *needle)
   4:         {
   5:             char *p1 = haystack;
   6:             char *p2;
   7:             char *pb;
   8:             char *pp;
   9:  
  10:             if (!*needle)
  11:                 return haystack;
  12:  
  13:             pp = haystack;
  14:             p2 = needle;
  15:             while (*p2++)
  16:                 pp++;
  17:             do {
  18:                 p2 = needle;
  19:                 pb = p1;
  20:                 while (*p2 && *pb && (*p2 == *pb)) {
  21:                     p2++;
  22:                     pb++;
  23:                 }
  24:                 if (!*p2)
  25:                     return p1;
  26:                 pp++;
  27:                 p1++;
  28:             } while (*pp);
  29:             return NULL;
  30:         }
  31: };
阅读(519) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~