• 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

    总结

    • 代码要尽可能精简
    • 写一个程序时首先要考虑特殊情况
    • 要考虑能否对循环次数作优化以提高程序效率
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/Jessey-Ge/p/11043504.html
Copyright © 2020-2023  润新知