码迷,mamicode.com
首页 > 其他好文 > 详细

Implement strStr()

时间:2014-09-06 12:10:03      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   使用   ar   strong   for   art   

Implement strStr().

Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

思路:使用DFS即可。

 1 class Solution {
 2 public:
 3     char *strStr( char *haystack, char *needle ) {
 4         int hlen = strlen( haystack ), nlen = strlen( needle );
 5         for( int i = 0; i <= hlen-nlen; ++i ) {
 6             int j = 0;
 7             for( ; j < nlen; ++j ) {
 8                 if( haystack[i+j] != needle[j] ) { break; }
 9             }
10             if( j == nlen ) { return haystack+i; }
11         }
12         return 0;
13     }
14 };

KMP算法,预先计算needle的跳转信息。

 1 class Solution {
 2 public:
 3     char *strStr( char *haystack, char *needle ) {
 4         int hlen = strlen( haystack ), nlen = strlen( needle );
 5         if( nlen == 0 ) { return haystack; }
 6         vector<int> jump;
 7         GetJumpTable( needle, nlen, jump );
 8         int i = 0, j = 0;
 9         while( i <= hlen-nlen ) {
10             if( haystack[i+j] != needle[j] ) {
11                 if( j == 0 ) {
12                     ++i;
13                 } else {
14                     i += j-1 - jump[j-1];
15                     j = jump[j-1]+1;
16                 }
17             } else {
18                 ++j;
19                 if( j == nlen ) { return haystack+i; }
20             }
21         }
22         return 0;
23     }
24 private:
25     void GetJumpTable( const char *needle, int nlen, vector<int> &jump ) {
26         jump.resize( nlen, -1 );
27         for( int i = 1; i <= nlen; ++i ) {
28             int k = i-1;
29             while( k != -1 ) {
30                 k = jump[k];
31                 if( needle[k+1] == needle[i] ) {
32                     jump[i] = k+1;
33                     break;
34                 }
35             }
36         }
37         return;
38     }
39 };

 

Implement strStr()

标签:style   blog   color   io   使用   ar   strong   for   art   

原文地址:http://www.cnblogs.com/moderate-fish/p/3956738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!