标签: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