我是靠谱客的博主 超帅煎蛋,最近开发中收集的这篇文章主要介绍easy 实现 strStr() 双指针 单指针 + 字符串切片双指针:单指针 + 字符串切片:KMP 算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
在这里插入图片描述

双指针:

c++

「朴素匹配」而言,一旦匹配失败,将会将原串指针调整至下一个「发起点」,匹配串的指针调整至起始位置,然后重新尝试匹配。「朴素匹配」的复杂度是
O(m*n)


class Solution {
public:
    int strStr(string haystack, string needle) {
        for(int i = 0; i + needle.size() <= haystack.size(); i++) {
            int j = 0;
            while(j < needle.size() && needle[j] == haystack[i + j]){
                 j++;
            }
            if(j == needle.size()){
                return i;
            }
        }
        return -1;
    }
};


单指针 + 字符串切片:

python


class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if not needle:
            return 0

        left=0
        right = len(needle)
        while right <= len(haystack):
            if haystack[left:right] == needle:
                return left
            left += 1
            right += 1

        return -1

c++

c++ string 字符串切片 substr函数:string.substr(pos, n)


class Solution {
public:
    int strStr(string haystack, string needle) {
        if(needle.empty()){
            return 0;
        }
        
        int left=0;
        int right = needle.size();
        while((left+right) <= haystack.size()){
            if (haystack.substr(left, right) == needle){
                return left;
            }
            left++;
        }
        return -1;
    }
};


KMP 算法

KMP 利用 “已匹配” 部分中相同的「前缀」和「后缀」来加速下一次的匹配。 KMP 的原串指针不会进行回溯(没有朴素匹配中回到下一个「发起点」的过程)

KMP 算法

最后

以上就是超帅煎蛋为你收集整理的easy 实现 strStr() 双指针 单指针 + 字符串切片双指针:单指针 + 字符串切片:KMP 算法的全部内容,希望文章能够帮你解决easy 实现 strStr() 双指针 单指针 + 字符串切片双指针:单指针 + 字符串切片:KMP 算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部