题目
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:2Example 2: Input: haystack = "aaaaa", needle = "bba" Output: -1Clarification: 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()
(2)substr
语法:basic_string substr(size_type index, size_type num = npos)
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
Python
总结
- 代码要尽可能精简
- 写一个程序时首先要考虑特殊情况
- 要考虑能否对循环次数作优化以提高程序效率