leetcode28_C++实现strStr()函数

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。


 

思路:以haystack="mississippi" ,needle="issip"为例子..

1.判断needle长度是否小于haystack

2.判断2个字符串为空的情况

3.判断正常情况

  a.如果haystack(i)==needle(j),则j++。若不相同,则i需要回到之前判断的数的后一位,也就是+1。

  如:

      i:        0   1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s    i   s   s   i   p    p   i

needle    :             i    s    s    i   p    

haystack(5)与needle(5)不相同,则又要重新循环,既,haystack(2)开始循环。

      i:       0  1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s   i   s   s   i   p    p   i

needle    :                  i     s   s   i    p    

 

     .............以此类推

 

      i:       0  1    2    3   4   5  6   7  8   9   10(数组下标)

haystack :      m   i    s    s   i   s   s   i   p    p   i

needle    :                             i   s   s    i   p    

 

如果, j的长度与needle相同,则返回 i-needle的长度。

 

 

class Solution {
public:
    int strStr(string haystack, string needle) {
        if (needle.size()==0)
            return 0;
        if (needle.size() > haystack.size())
            return -1;
        int j=0;//用来指向needle的字符串
        int i=0;
        for (i = 0; i < haystack.size(); i++) {
            if (j==needle.size()){//如果已经匹配完成则返回
                return i - needle.size();
            }
            if (haystack[i] == needle[j]){
                j++;
            } else{
                i -= j;
                j=0;
            }
        }
        //用来判断单个字母的时候,j++之后j=1,i=1;
        if (j==needle.size()){
            return i - needle.size();
        }
        return -1;
    }
};

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-12-30 15:30  菜鸟创业梦  阅读(1628)  评论(0编辑  收藏  举报