码迷,mamicode.com
首页 > 编程语言 > 详细

力扣(LeetCode)试题28-实现strStr() C++代码

时间:2020-07-04 15:12:40      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:stack   返回   实现   元素   http   div   size   存在   pac   

没想到的点:若haystack="mississippi",needle = "issip"。按我的匹配算法(在haystack中检索needle的第一个元素,若没有该元素返回-1,若有则搜索后边的元素是否对应,这是有问题的!!),匹配到haystack中前部分issis,程序就结束了,返回了-1,实际应该匹配到issip。缜密的逻辑还需要不断提升呀!

错误代码记录一下吧,如下

 1 class Solution
 2 {
 3 public:
 4     int strStr(string haystack, string needle)
 5     {
 6         if (needle.length() == 0) return 0;
 7         else {
 8             int i = 0;
 9             while (i < haystack.length())
10             {
11                 if (haystack[i] != needle[0])
12                 {
13                     i += 1;
14                 }
15                 else
16                     //否则,haystack中存在needle中的第一个元素,然后判断是不是needle整个元素
17                 {
18                     int k = 0; //指向needle的头元素
19                     int limit = needle.length();
20                     while (k < limit)
21                     {
22                         if (haystack[i] != needle[k])
23                             return -1;
24                         else
25                         {
26                             i += 1;
27                             k += 1;
28                         }
29                     }
30                     return i - k;//循环完毕,此时i指向了needle最后一个元素,需要减去这个needle的长度
31                 }
32             }
33             return -1;
34         }
35     }
36 
37 };

正确代码如下:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Solution
 6 {
 7 public:
 8     int strStr(string haystack, string needle)
 9     {
10         int needle_size = needle.length();
11         int haystack_size = haystack.length();
12         int res = haystack_size - needle_size;
13         if (needle_size == 0) return 0; //特殊情况
14         else 
15         {
16             //遍历haystack,寻找是否包含needle
17             for (int i = 0; i <= res; ++i)
18             {
19                 string str = haystack.substr(i, needle_size);//substr从第i个位置截取,截取的长度为needle_size
20                 if (str == needle) return i;
21                 else continue;
22             }
23             return -1;
24         }
25     }
26 
27 };
28 
29 int main()
30 {
31     string haystack = "mississippi";
32     string needle = "issip";
33     Solution sol;
34     int p;
35     p = sol.strStr(haystack, needle);
36     cout << p << endl;
37     int u;
38     cin >> u;
39     return 0;
40 }

技术图片

 

力扣(LeetCode)试题28-实现strStr() C++代码

标签:stack   返回   实现   元素   http   div   size   存在   pac   

原文地址:https://www.cnblogs.com/pgzhanglin/p/13234279.html

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