LeetCode: 实现 strStr() (28)
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll”
输出: 2
示例 2:
输入: haystack = “aaaaa”, needle = “bba”
输出: -1
代码:
class Solution {
public int strStr(String haystack, String needle) {
/** 直接法,将needle作为整体比较 **/
// if(needle.equals("")) return 0;
// int nl = needle.length();
// int hl = haystack.length();
// int index = 0;
// while (index <= hl-nl){
// if(!haystack.substring(index,index+nl).equals(needle)){
// index++;
// }else{
// break;
// }
// }
// return index<=hl-nl ? index:-1;
/** 双指针法 遍历两个字符串,逐一比较字符。**/
if(needle.equals("")) return 0;
int nl = needle.length();
int hl = haystack.length();
int n = 0,h = 0;
while(h<hl){
if(needle.charAt(n) == haystack.charAt(h)){
n++;
h++;
}else{
h = h - n +1;//当两个字符不同时,前面的比较都得从头再来。needle字符串从头开始,而haystack需要从下一个字符开始
n = 0;
}
if( n == nl ){
break;
}
}
return n<nl? -1:h-n;
}
}