【面试经典 150 | 数组】找出字符串中第一个匹配项的下标

文章目录

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更......
专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【字符串】【find】


题目来源

28. 找出字符串中第一个匹配项的下标


解题思路

方法一:find

仔细阅读题目内容,发现要实现的函数就是 C++ 中 string 类下的成员函数 find,即查找 needle 在字符串 haystack 指定位置后第一次出现的位置。

代码

cpp 复制代码
class Solution {
public:
    int strStr(string haystack, string needle) {
        return haystack.find(needle);
    }
};

方法二:暴力匹配

思路

我们可以让字符串 needle 与字符串 haysyack 的所有长度为 mneedle 的长度) 的子串均匹配一次。

代码

cpp 复制代码
class Solution {
public:
    int strStr(string haystack, string needle) {
        int n = haystack.size(), m = needle.size();
        for (int i = 0; i + m <= n; ++i) {
            bool flag = true;
            for (int j = 0; j < m; ++j) {
                if (haystack[i + j] != needle[j]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                return i;
            }
        }
        return -1;
    }
};

复杂度分析

时间复杂度: O ( n m ) O(nm) O(nm), n n n 是字符串 haystack 的长度, m m m 是字符串 needle 的长度。

空间复杂度: O ( 1 ) O(1) O(1)。

方法三:KMP

关于 KMP 解法,可以参考 一文讲清楚字符串搜索问题【朴素法】和【KMP算法】


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

相关推荐
啊?啊?6 分钟前
C/C++练手小项目之倒计时与下载进度条模拟
c语言·开发语言·c++
西阳未落29 分钟前
C++基础(22)——模板的进阶
开发语言·c++
waves浪游30 分钟前
C++模板进阶
开发语言·c++
青草地溪水旁1 小时前
设计模式(C++)详解——迭代器模式(1)
c++·设计模式·迭代器模式
青草地溪水旁1 小时前
设计模式(C++)详解——迭代器模式(2)
java·c++·设计模式·迭代器模式
SamsongSSS1 小时前
《C++ Primer Plus》读书笔记 第二章 开始学习C++
c++·后端
Mr_WangAndy2 小时前
C++设计模式_创建型模式_单件模式
c++·单例模式·设计模式
茉莉玫瑰花茶2 小时前
C++扩展 --- 并发支持库(补充3)
开发语言·c++
半桔2 小时前
【网络编程】TCP 粘包处理:手动序列化反序列化与报头封装的完整方案
linux·网络·c++·网络协议·tcp/ip
GUIQU.5 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt