春招打卡d7n12-leetcode刷题28实现 strStr()

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题28实现 strStr()

前文

本文为leetcode遍历效率类型问题,题目序号为28,主要考察遍历时的效率。

题目信息

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回  -1 。

解题思路

根据题目信息,本题目所考察的就是字符串中是否包含另一字符串的操作。其实在每种语言中都有封装好的该方法,这里手动实现一下。不过本文所分享的方法仅为比较基础的暴力解法,效率上属于比较慢的一种。具体来看思路,就是利用双指针,其中一个指针q,会根据给定字符串进行位置遍历。随着位置向前,每个位置都跟需要的字符串进行比较操作。如果完全相等,则记录该q的位置将其赋值给p,并返回p作为结果。如果有其中任意一位不相等,则直接跳过比较循环,q向前移动一位。按此方式进行操作,如果存在就会返回实际的位置,如果不存在就会返回-1,也就达到了题目的目标要求。

解题代码

public int strStr(String haystack, String needle) {
    if("".equals(needle)){
        return 0;
    }
    int q = 0;
    int p = -1;
    char[] m = haystack.toCharArray();
    char[] n = needle.toCharArray();
    int length = m.length - n.length;
    while(q <= length){
        int pos = 0;
        boolean needBreak = false;
        for (int i = 0; i < n.length; i++) {
            if(m[i + q] != n[i]){
                break;
            }
            if(i == n.length - 1){
                needBreak = true;
            }
        }
        if(needBreak){
            p = q;
            break;
        }
        q++;
    }
    return p;
}
复制代码

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。

おすすめ

転載: juejin.im/post/7076252124568354852