zoukankan      html  css  js  c++  java
  • 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;
        }
    };

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    tianjiale菜鸟名企梦
  • 相关阅读:
    Date
    Math
    封装实参的对象 arguments
    函数方法call()和apply()
    执行上下文栈
    原型(prototype属性)和原型链。 重要!!!
    android studio for Mac快捷键大全
    软件的横竖屏切换
    Android XML文件中@id和@+id的区别
    java中的Iterator<E>
  • 原文地址:https://www.cnblogs.com/tianjiale/p/10199587.html
Copyright © 2011-2022 走看看