题目:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
- 输入: haystack = “hello”, needle = “ll”
- 输出: 2
示例 2:
- 输入: haystack = “aaaaa”, needle = “bba”
- 输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
Java
class Solution {
public int strStr(String haystack, String needle) {
if (needle == null || needle.length() < 1 ) {
return 0;
}
int first = 0, second = 0;
while(first < haystack.length() && second< needle.length()) {
if (haystack.charAt(first) == needle.charAt(second)) {
first++;
second++;
} else {
first = first - second + 1;
second = 0;
}
if (second == needle.length()) {
return first - second;
}
}
return -1;
}
}
说明:
这是比较暴力的方法,题目没有限制使用indexOf()方法,但题目的本意并不是让我们使用indexOf()。这里的关键在于当haystack和needle某一位置的字符不相等时,要重置haystack的下标,即上面的first的值。
运行结果
执行用时 :9 ms, 在所有 Java 提交中击败了14.99%的用户
内存消耗 :36 MB, 在所有 Java 提交中击败了84.01%的用户