实现strStr()
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
1 | 输入: haystack = "hello", needle = "ll" |
示例 2:
1 | 输入: haystack = "aaaaa", needle = "bba" |
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf()) 定义相符。
思路:一开始决定利用contains()函数来做,后来发现contains函数只能返回包含或者不包含的结果,并不能返回匹配的位置,所以索性就自己写一个吧。整体思路也不难,首先分情况讨论:
1.needle为空,则按题目要求,返回0即可;
2.needle的长度大于haystack的长度,肯定不能匹配,返回-1;
3.needle的长度小于或者等于haystack的长度。
第3种情况最复杂,首先这种情况下,最先要考虑的是在haystack中找到和needle的首字符匹配的第一个位置,利用一个while循环即可,设置索引,记录下第一个匹配的位置h,之后再将needle中的下一个字符和haystack中的第h+1个字符相比较,如果直到needle走完全部自己的字符,haystack也全部匹配且未越界,则返回h即可。如果没有全部匹配(即needle字符串没有走到最后),需要考虑haystack后面是不是还有重复的子串可以匹配(比如haystack=”mississippi”,而needle=”issip”的场景中),而不能简单的返回-1。为了验证后面的haystack后面的子串是否能匹配,只需要截取haystack中h+1到haystack.length()的子串再递归调用strStr()即可。
java代码如下:
1 | public class StrStr { |