美文网首页
28. 实现 strStr()

28. 实现 strStr()

作者: justonemoretry | 来源:发表于2020-06-24 00:09 被阅读0次

自己解法

这个题因为是简单题,就直接逐个获取对应长度的字符串,然后跟对应的字符串进行对比。

class Solution {

    public int strStr(String haystack, String needle) {

        if (needle == "") {

            return 0;

        }

        int nLen = needle.length();

        int hLen = haystack.length();

        for (int i = 0; i <= hLen - nLen; i++) {

            String temp = haystack.substring(i, i + nLen);

            if (needle.equals(temp)) {

                return i; 

            }

        }

        return -1;

    }

}

官方解法

官方有个双指针的解法,分别指向haystack和needle,只有当两者的第一个字母相同时,两者才进行比较,不然haystack一直后移,两者完全一致的情况下,返回对应下标,不一致的情况下,pn回溯为pn - currLen + 1,接着进行上述过程。

class Solution {

  public int strStr(String haystack, String needle) {

    int L = needle.length(), n = haystack.length();

    if (L == 0) return 0;

    int pn = 0;

    while (pn < n - L + 1) {

      // find the position of the first needle character

      // in the haystack string

      while (pn < n - L + 1 && haystack.charAt(pn) != needle.charAt(0)) ++pn;

      // compute the max match string

      int currLen = 0, pL = 0;

      while (pL < L && pn < n && haystack.charAt(pn) == needle.charAt(pL)) {

        ++pn;

        ++pL;

        ++currLen;

      }

      // if the whole needle string is found,

      // return its start position

      if (currLen == L) return pn - L;

      // otherwise, backtrack

      pn = pn - currLen + 1;

    }

    return -1;

  }

}

相关文章

网友评论

      本文标题:28. 实现 strStr()

      本文链接:https://www.haomeiwen.com/subject/kivkfktx.html