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

2016.6.18——Implement strStr()

时间:2016-06-18 19:54:17      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

Implement strStr()

本题收获:

1.考虑多种边界条件。

2.haystack.size()和 int n = haystack.size()的区别(现在还不知道)

 

  题目:

  Implement strStr().

  Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

  思路:

    注意题目中并没有说haystack.size() 一定大于needle.size()

    我的思路:暴力搜索,利用两个for循环,逐个对比,没有考虑有些边界条件。

    leetcode:  暴力搜索,但是考虑充分了边界条件

  需要考虑的边界条件: haystack ,needle

  1." " , " "   输出0

  2." " , "a"  输出 -1

  3."a" , " "  输出0

  4."mississippi" , "issip"  输出4

  5."aa" , "aaaa" 输出-1

  6."a" , "a" 输出0,注意正常时,是从0开始还是1开始(第一个位置到底是0还是1)

  代码:正确的代码

 1 class Solution {
 2 public: 
 3     int strStr(string haystack, string needle) {
 4         int m = haystack.length(), n = needle.length();
 5         if (!n) return 0;
 6         for (int i = 0; i < m - n + 1; i++) {
 7             int j = 0;
 8             for (; j < n; j++)
 9                 if (haystack[i + j] != needle[j])    
10                     break;
11             if (j == n) return i;
12         }
13         return -1;
14     }
15 };

   特殊情况:haystack:mississippi  needle:issip 

  我的代码:

  1.思路有问题

 1 class Solution {
 2 public:
 3     int strStr(string haystack, string needle) {
 4         if (haystack.size() == 0 && needle.size() == 0) return 0;
 5         if (haystack.size() != 0 && needle.size() == 0) return 0;
 6         if (haystack.size() == 0 && needle.size() != 0) return -1;
 7         int n = 0;
 8         int j = needle.size();
 9         for (size_t i = 0; i < haystack.size(); i++)
10         {
11             for (size_t j = 0; j < needle.size(); j++)
12             {
13                 if (needle[j] != haystack[i])
14                 {
15                     j = 0;
16                     n++;
17                     break;
18                 }
19             }
20             return n - needle.size() + 1;
21         }
22         
23     }
24 };

  很多边界条件都不符合,每次测试加一个if语句,代码冗余度越来越高,如果加了两个if语句还有错就需要考虑是不是思路的问题了。

  测试全代码:

  有个问题:我不用m = haystack.size(),和n = needle.size()时,需要加if语句判断haystack.size(),needle.size()的大小,但是用m,n后就不需要加if语句,为什么????

 1 // Implement strStr().cpp : 定义控制台应用程序的入口点。
 2 //考虑多点测试条件
 3 //
 4 
 5 #include "stdafx.h"
 6 #include "iostream"
 7 #include "stack"
 8 using namespace std;
 9 
10 class MyClass
11 {
12 public:
13     int strStr(string haystack, string needle)            //师兄的代码中哪里隐含了haystack.size() >= needle.size()????
14     {
15         if (needle.size() == 0) return 0;
16         int m = haystack.size(), n = needle.size();        //为什么修改之后就可以了 
17         //if (haystack.size() >= needle.size())
18         //{
19             for (int i = 0; i < m-n+1; i++)
20             {
21                 int j = 0;
22                 for (; j < needle.size(); j++)
23                 {
24                     if (haystack[i + j] != needle[j])
25                         break;
26                 }
27                 if (j == needle.size())
28                 {
29                     return i + 1;
30                 }
31             }
32         //}
33         return -1;
34     }
35 };
36 
37 /*
38 class MyClass {
39 public:
40     int strStr(string haystack, string needle) {
41         int m = haystack.length(), n = needle.length();
42         if (!n) return 0;
43         for (int i = 0; i < m - n + 1; i++) {
44             int j = 0;
45             for (; j < n; j++)
46                 if (haystack[i + j] != needle[j])
47                 break;
48             if (j == n) return i;
49         }
50         return -1;
51     }
52 };*/
53 
54 
55 int _tmain(int argc, _TCHAR* argv[])
56 {
57     string hay = "abb";
58     string need = "abaaa";
59     MyClass solution;
60     int m = 0;
61     m = solution.strStr(hay, need);
62     cout << m << endl;
63     system("pause");
64     return 0;
65 }

 

2016.6.18——Implement strStr()

标签:

原文地址:http://www.cnblogs.com/zhuzhu2016/p/5596648.html

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