LeetCode28-实现strStr()(水题)

一开始的想法是

取needle的第一个字符开始呗,遇到合适的再比第二个。

如果是找到的话,肯定是一个个比对完了。

找不到的情况就是,needle字符串比haystack剩下的字符串长了。

能够跳的情况....算了,还是一步步来,这个不合适就比对下一个。

比如原串1112,子串112,不好跳。

 

要注意一些情况就行了

这里的begin设置的比较巧妙,减少了很多代码

    public int strStr(String haystack, String needle) {
               
        //要找的是空,返回0
        if(needle==null)
            return 0;

        //元字符是null,肯定是-1找不到
        if(haystack==null)
            return -1;

        int len1 = haystack.length();
        int len2 = needle.length();


        //要找的比原来的长
        if(len1<len2)
            return -1;

        if(len1==len2){
            if(haystack.equals(needle))
                return 0;
            else
                return -1;
        }

        //到了这个len1肯定比len2大了
        if(len2==0)
            return 0;

        //到了这里,len1和len2都大于0

        int begin = 0;

        while(len1-begin>=len2){

            //假设存在
            boolean exist = true;

            for(int i=begin,j=0;i<len1&&j<len2;i++,j++){
                if(haystack.charAt(i)!=needle.charAt(j)){
                    exist = false;
                    break;
                }
            }

            //正常跳出的话就是找到了
            if(exist)
                return begin;

            begin++;


        }

        return -1;

    
    }

 

 

前面的都是用库函数的....

 

posted @ 2018-07-18 19:37  朋友圈  阅读(739)  评论(0编辑  收藏  举报