28. 实现 strStr()
实现 strStr() 函数。
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1
。
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
示例 1:
输入:haystack = "hello", needle = "ll" 输出:2
示例 2:
输入:haystack = "aaaaa", needle = "bba" 输出:-1
提示:
1 <= haystack.length, needle.length <= 104
haystack
和needle
仅由小写英文字符组成
解析:
默写一遍kmp,kuangbin的板子
class Solution { public: int next[10010]; void get_next(string T) { int i = 0, j = -1; int n = T.length(); next[0] = -1; while(i < n) { if(j == -1 || T[i] == T[j]) next[++i] = ++j; else j = next[j]; } } int kmp(string S, string T) { int i = 0, j = 0; int len1 = S.length(), len2 = T.length(); while(i < len1 && j < len2) { if(j == -1 || S[i] == T[j]) i++, j++; else j = next[j]; } if(i == len1 && j < len2) return -1; return i - j; } int strStr(string haystack, string needle) { if(needle == "") return 0; get_next(needle); return kmp(haystack, needle); } };