LeetCode28 实现strStr()
程序员文章站
2024-03-22 13:56:10
...
双指针
: 通过一个指针指向haystack
,一个指针指向needle
,不断移动指针向前走,若发现needle
指针指到字符串的尾部则说明相等
此时结束;若发现遍历到的某个字符不相等则需要回溯haystack
,并将needle
指针重置
package KTwoPointers;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/5/3 0003 23:48
*/
public class Problem28 {
//通过两个指针
//不断遍历两个字符串
public int strStr(String haystack, String needle) {
if(haystack==null||needle==null) return -1;
if(haystack.equals("")&&needle.equals("")) return 0;
if(needle.equals("")) return 0;
//记录带匹配的字符串的指针
int indexHay = 0;
//记录
int indexNeed = 0;
//结果值
int result = -1;
//用于记录下次应该从哪个位置遍历
int last = 0;
//待匹配字符串遍历
while(indexHay<haystack.length()){
//待匹配字符串到大末尾说明这个结果可以
if(indexNeed==needle.length()){
return result;
}
//发现字符相等
if(haystack.charAt(indexHay)==needle.charAt(indexNeed)){
//发现从待比较字符串的第一位开始,记录此时在比较字符串中的位置
if(indexNeed==0){
result=indexHay;
}
//不断向前推进
indexHay++;
indexNeed++;
//若此时都到字符串尾部则页返回true
if(indexHay==haystack.length()&&indexNeed==needle.length()) return result;
}else{//不相等,则更新indexHay为result+1
//
indexNeed=0;//待匹配字符只能从第一个接着比
//待匹配字符从哪一位????
indexHay = last+1;
last=indexHay;
}
}
return -1;
}
}