题目
实现 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() 定义相符。
解法
解法一:暴力破解
直接比较子字符串是否相等
Java
1 | public int strStr(String haystack, String needle) { |
解法二:
- 移动 pn 指针,直到 pn 所指向位置的字符与 needle 字符串第一个字符相等。
- 通过 pn,pL,curr_len 计算匹配长度。
- 如果完全匹配(即 curr_len == L),返回匹配子串的起始坐标(即 pn - L)。
- 如果不完全匹配,回溯。使 pn = pn - curr_len + 1, pL = 0, curr_len = 0。
Java
1 | public int strStr(String haystack, String needle) { |
解法三:
比较haystack中和needle相等的字串的哈希码和needle的哈希码是否相等
Java
1 | class Solution { |