28. 实现strStr()

双指针

class Solution {
    public int strStr(String haystack, String needle) {

        /**
         * 如果needle为空,结果肯定为0
         * 如果needle不为空,如果haystack为空,结果肯定为-1
         */
        if (needle.length() == 0){
            return 0;
        }

        if (haystack.length() == 0){
            return -1;
        }

        int left = 0;
        int right = 0;
        int newStart = 0;
        int sum = 0;

        while (left < haystack.length()){

            if (haystack.charAt(left) == needle.charAt(right)){

                left++;
                right++;
                sum++;
            }
            else {

                /**
                 * 当匹配到不一样的字符时,要从上一次开始循环的下一位重新开始,而不是直接left++
                 * 定义一个newStart来记录重新开始的位置
                 */
                left = ++newStart;
                right = 0;
                sum = 0;
            }

            if (sum == needle.length()){
                return left - needle.length();
            }
        }

        return -1;
    }
}

/**
 * 时间复杂度 O(m * n)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/implement-strstr/

上一篇:offsetTop和scrollTop的差别


下一篇:Android开发面试经——3.常见Java基础笔试题