欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode28 实现strStr()

程序员文章站 2024-03-22 13:56:10
...

实现strStr()函数
LeetCode28 实现strStr()

双指针: 通过一个指针指向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;
    }



}


相关标签: leetcode刷题笔记