题目:
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串
出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
此题目题主只想到了三个方法,一个是用substring函数,类似于滑动窗口一样比较
第二种是KMP算法,由于水平不高,以后再补充
第三种是双指针,在之前刷题目的过程中总结出只要涉及到字符串的匹配比较都可以用到双指针
直接上代码:
class Solution {
public int strStr(String haystack, String needle) {
int count = 0;
int h = haystack.length();
int n = needle.length();
if(n == 0) return 0;
int indexh = 0; //haystack的下标指针
//int indexn = 0; //needle的下标指针
//needle是固定需要匹配的,无论haystack从哪开始都与needle从头开始匹配
while(indexh < h-n+1){
while(indexh < h-n+1 && haystack.charAt(indexh) != needle.charAt(0)){
indexh = indexh + 1; //首位不相等就后移
}
int currlength = 0;
int indexn = 0;
while(indexh < h && indexn < n && haystack.charAt(indexh) == needle.charAt(indexn)){
indexh ++;
indexn ++;
currlength ++;
}
if(currlength == n){
return indexh - currlength;
}
indexh = indexh - currlength + 1;
}
return -1;
}
}