zoukankan      html  css  js  c++  java
  • 28. Implement strStr()[E]实现strStr()

    题目


    Implement strStr().
    Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
    Example 1:
      Input:haystack = "hello", neddle = "ll"
      Output:2
    Example 2:
      Input: haystack = "aaaaa", needle = "bba"
      Output: -1
    Clarification:
    What should we return when needle is an empty string? This is a great question to ask during an interview.
    For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr() and Java's indexOf().

    思路


    (1)题意

    给定一个haystack字符串和一个needle字符串,需要我们做的是在haystack字符串中找出needle字符串出现的第一个位置(从0开始),如果不存在返回-1。此外,如果needle字符串为空,返回0。

    (2)如何在在haystack字符串中找出needle字符串?

    我们想到将needle字符串视为haystack字符串的一个子串,利用substr(pos, n)函数返回haystack字符串中从pos到pos+n位置的字符串,检验返回的字符串与needle是否一致,如果一致则返回pos,否则返回-1。这里的pos应该是needle字符串第一个字符在haysatck字符串中的位置,n应该是needle字符串的长度。

    (3)注意

    这里我们要注意的是遍历次数(循环次数),因为是在haystack字符串中找needle字符串,那么循环次数一定不会超过haystack.size() - needle.size(),超过这个次数,说明needle肯定不存在。

    Tips


    string(C++)

    (1)empty

    语法:bool empty()
    如果字符串为空,返回true;否则返回false。

    (2)substr

    语法:basic_string substr(size_type index, size_type num = npos)
    substr返回字符串的一个子串,从index开始,到index+num结束,子串长度为num。如果没有指定num,则默认值是string::npos,这样substr()返回从index开始的剩余字符串。

    C++

    class Solution {
    public:
        int strStr(string haystack, string needle) {
                  
            //先考虑特殊情况
            
            //特殊情况1:needle字符为空
            if(needle.empty())
                return 0;
            //特殊情况2:needle字符长度大于haystack字符长度或者haystack字符长度为0
            if(needle.size() > haystack.size() || haystack.empty() )
                return -1;
                    
            for(int i=0;i<haystack.size() - needle.size() + 1;i++){
                
                if(haystack[i] == needle[0] && haystack.substr(i, needle.size()) == needle )
                    return i;
                    
            }
            
            return -1;
        }
    };
    

    Python

    总结

    • 代码要尽可能精简
    • 写一个程序时首先要考虑特殊情况
    • 要考虑能否对循环次数作优化以提高程序效率
  • 相关阅读:
    P1880 [NOI1995]石子合并
    LC 1388. Pizza With 3n Slices
    1129 Recommendation System
    1131 Subway Map
    C#中的lamda实用的select用法
    C# Image与Base64编码互转函数
    签名算法的URL
    xml格式封装数据
    layer 相关网址
    js-清空array数组
  • 原文地址:https://www.cnblogs.com/Jessey-Ge/p/11043504.html
Copyright © 2011-2022 走看看