题目详情
给你两个字符串 haystack
和 needle
,请你在 haystack 字符串中找出 needle
字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1
。
示例 1:
输入:haystack = "hello", needle = "ll"
输出:2
示例 2:
输入:haystack = "aaaaa", needle = "bba"
输出:-1
Java代码(排序)
public int strStr(String haystack, String needle) {
if (needle.length() == 0)
return 0;
int i = 0;
int j = 0;
while (i < haystack.length() && j < needle.length()) {
if (haystack.charAt(i) == needle.charAt(j)) {
i++;
j++;
} else {
//如果不匹配,就回退,从第一次匹配的下一个开始,
i = i - j + 1;
j = 0;
}
if (j == needle.length())
return i - j;
}
return -1;
}
总结
如果字串为空直接返回0。先设置变量i,j分别指向两个字符串,如果两个指针指向的字符相同那么就i++,j++来判断下一个字符,如果不同那么子串从0开始,而主串从刚才的起点加一开始。当遇到j等于字串长度的时候说明找到了,那么返回i - j指向主串与子串相同的起点。