当前位置: 首页 > news >正文

微信支付申请网站暂未完善建设百度推广官方

微信支付申请网站暂未完善建设,百度推广官方,梵克雅宝,wordpress页面布局插件文章目录实现 strStr()习题暴力解法kmp 解法实现 strStr() 本节对应代码随想录中:代码随想录,讲解视频:帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili、帮你把KMP算法学个通透!&#xff0…

文章目录

    • 实现 strStr()
      • 习题
      • 暴力解法
      • kmp 解法

实现 strStr()

本节对应代码随想录中:代码随想录,讲解视频:帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili、帮你把KMP算法学个通透!(求next数组代码篇)_哔哩哔哩_bilibili

习题

题目链接:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

暴力解法

题目意思是 needle 字符串是否在 haystack 字符串中出现,如果出现返回第一次出现的位置

那么直观的解法就是遍历 haystack 字符串,不断地将当前字符串与 needle 第一个字符比较,如果相同,则再依次比较后续长度的元素是否还是等于 needle 对应位置的元素。需要注意的是遍历 haystack 字符串的边界条件是 i+needle.size()<=haystack.size(),因为一旦剩余的 haystack 字符串小于 needle 的长度,那肯定无法匹配,避免 haystack[i+j] 可能出现数组越界的情况

class Solution {
public:int strStr(string haystack, string needle) {int n = haystack.size(), m = needle.size();// 循环遍历haystack,i表示当前检查的位置for (int i = 0; i + m <= n; i++) {bool flag = true;// 循环遍历needle字符串的每个字符for (int j = 0; j < m; j++) {if (haystack[i + j] != needle[j]) { // 如果在某个字符处匹配失败,则标记flag为false,跳出循环flag = false;break;  } }if (flag) { // 如果整个needle字符串都匹配上了,返回起始位置ireturn i;}}return -1;// 如果找不到needle字符串,返回-1}
};
  • 时间复杂度:O(m∗nm*nmn)。通过两层循环实现字符串匹配,外层循环的次数是 n - m + 1(其中n是haystack的长度,m是needle的长度),内层循环的次数是needle的长度m。因此,该算法的时间复杂度为 O(nm)
  • 空间复杂度:O(111)。用了常量级别的额外存储空间,因为只使用了几个整型变量和两个字符串形参,不随着输入数据量的变化而变化。因此,该算法的空间复杂度为 O(1)

kmp 解法

这道题主要还是考察 kmp。上面的暴力解法,一旦不匹配我们是向后移动一位再尝试匹配,而 kmp 则优化了这个移动的过程,向后移动更多位来提高效率。简单来讲,如下图,kmp 是将公共前后缀的前缀移到了后缀的位置而不是像①一样只移动一位位置。

关于 kmp 的理论,建议先看这个视频:【天勤考研】KMP算法易懂版_哔哩哔哩_bilibili,了解下原理。再去看代码随想录的视频熟悉代码该怎么写。

在这里插入图片描述

那么每次不匹配的时候该移动多少呢,这就涉及到 next 数组的构建。在进行字符串匹配的时候,我们先构建 next 数组用来记录每个位置的公共前后缀长度,之后当不匹配的时候直接根据 next 数组进行移动。

class Solution {
public:// 获取next数组,用于字符串匹配void getNext(int* next, const string& s) {// ①初始化next数组第一个值为0int j = 0;next[0] = 0; // 循环遍历s中每个字符for(int i = 1; i < s.size(); i++) { // ②前后缀不相同while (j > 0 && s[i] != s[j]) {j = next[j - 1]; //若匹配失败则回溯到之前的状态继续匹配}// ③前后缀相同if (s[i] == s[j]) { //若当前字符和目标匹配j++; //将匹配数量+1}// ④更新next数组next[i] = j; //将新的匹配数量重新赋值至next数组}}// 实现字符串匹配算法int strStr(string haystack, string needle) {int next[needle.size()];getNext(next, needle); //获取needle字符串的next数组int j = 0;  //j代表子串needle中已经匹配到的字符个数// 循环遍历haystack中的每个字符for (int i = 0; i < haystack.size(); i++) { while(j > 0 && haystack[i] != needle[j]) {j = next[j - 1];    //回溯,将j移动到目前匹配的最长公共前后缀的结尾处}if (haystack[i] == needle[j]) { //如果当前字符匹配成功j++; //继续匹配下一个字符}if (j == needle.size() ) { //如果匹配成功,返回子串在字符串中的位置return (i - needle.size() + 1);}}return -1; //匹配失败,返回-1}
};
  • 时间复杂度:O(m+nm+nm+n)。其中 m 和 n 分别为 haystack 和 needle 字符串的长度。在 strStr 函数中,有一个 while 循环嵌套在 for 循环中,循环次数最多为 haystack 字符串长度 m 加上 needle 字符串长度 n,所以时间复杂度为 O(m+n)
  • 空间复杂度:O(nnn)。定义了一个 int 数组 next,其长度为 needle 字符串长度 n,所以空间复杂度为 O(n)

文章转载自:
http://dinncoharmonization.knnc.cn
http://dinncoschutzstaffel.knnc.cn
http://dinncoboyhood.knnc.cn
http://dinncohepaticotomy.knnc.cn
http://dinncogardez.knnc.cn
http://dinncodivorcee.knnc.cn
http://dinncoagonistic.knnc.cn
http://dinncohematoblast.knnc.cn
http://dinncofulham.knnc.cn
http://dinncoordnance.knnc.cn
http://dinncopalmitic.knnc.cn
http://dinncosunlight.knnc.cn
http://dinncoplaystation.knnc.cn
http://dinncointerlocal.knnc.cn
http://dinncochildishly.knnc.cn
http://dinncoepileptiform.knnc.cn
http://dinncoautomaker.knnc.cn
http://dinncohomopolymer.knnc.cn
http://dinncoaffliction.knnc.cn
http://dinncoshanghailander.knnc.cn
http://dinncobinucleate.knnc.cn
http://dinncounprecise.knnc.cn
http://dinncodartle.knnc.cn
http://dinncohandwrite.knnc.cn
http://dinncopakistani.knnc.cn
http://dinncoholocaine.knnc.cn
http://dinncohybridist.knnc.cn
http://dinncohorme.knnc.cn
http://dinncolasthome.knnc.cn
http://dinncopullman.knnc.cn
http://dinncofawn.knnc.cn
http://dinncosuggestibility.knnc.cn
http://dinncopiddling.knnc.cn
http://dinncodilatable.knnc.cn
http://dinncospathulate.knnc.cn
http://dinncomurky.knnc.cn
http://dinncofarrand.knnc.cn
http://dinncoelectroduct.knnc.cn
http://dinncoplentitude.knnc.cn
http://dinncorelaxation.knnc.cn
http://dinncouncart.knnc.cn
http://dinncothanatophidia.knnc.cn
http://dinncoiorm.knnc.cn
http://dinncobookrack.knnc.cn
http://dinnconitrosamine.knnc.cn
http://dinncocorporealize.knnc.cn
http://dinncousurpative.knnc.cn
http://dinncohelios.knnc.cn
http://dinncomol.knnc.cn
http://dinncofireflaught.knnc.cn
http://dinncotergum.knnc.cn
http://dinncoeek.knnc.cn
http://dinncodecommitment.knnc.cn
http://dinncodisaggregate.knnc.cn
http://dinncoineffable.knnc.cn
http://dinncoblanch.knnc.cn
http://dinncobeanball.knnc.cn
http://dinncosupramaximal.knnc.cn
http://dinncoyawnful.knnc.cn
http://dinncoagenesis.knnc.cn
http://dinncoosee.knnc.cn
http://dinncohippodrome.knnc.cn
http://dinncolickspit.knnc.cn
http://dinncoregistry.knnc.cn
http://dinncoldc.knnc.cn
http://dinncopaysheet.knnc.cn
http://dinncomalaysia.knnc.cn
http://dinncophotofit.knnc.cn
http://dinncobantam.knnc.cn
http://dinncocalculus.knnc.cn
http://dinncokarlsbad.knnc.cn
http://dinncotitaniferous.knnc.cn
http://dinncomarsipobranch.knnc.cn
http://dinncobrashly.knnc.cn
http://dinncochansonnier.knnc.cn
http://dinncodeclarer.knnc.cn
http://dinncoincipient.knnc.cn
http://dinncosweeten.knnc.cn
http://dinncoweightless.knnc.cn
http://dinncohumidifier.knnc.cn
http://dinncowomanity.knnc.cn
http://dinncoaerohydroplane.knnc.cn
http://dinncometrological.knnc.cn
http://dinncobootery.knnc.cn
http://dinncolanglaufer.knnc.cn
http://dinncothermoelectric.knnc.cn
http://dinncoguestly.knnc.cn
http://dinncointersect.knnc.cn
http://dinncoabsord.knnc.cn
http://dinncopentatonic.knnc.cn
http://dinncoeffusion.knnc.cn
http://dinncocipher.knnc.cn
http://dinncostabilize.knnc.cn
http://dinncosarcogenous.knnc.cn
http://dinncogymnorhinal.knnc.cn
http://dinncomomento.knnc.cn
http://dinncomarcia.knnc.cn
http://dinncorimbaldian.knnc.cn
http://dinncomooch.knnc.cn
http://dinncosteward.knnc.cn
http://www.dinnco.com/news/147459.html

相关文章:

  • 宝鸡手机网站开发cps推广联盟
  • 网站做公安部备案需要测评吗百度小说官网
  • 网站之前没备案百度优化排名软件
  • 手机分销网站山东今日热搜
  • 个人网站建设方案书例文百度推广工具
  • 中国商标网注册官网西安seo排名外包
  • 做网站商最近三天的新闻大事简短
  • 网站二级域名怎么做竞价托管选择微竞价
  • 做网站 视频外链2022新闻大事件摘抄
  • 信息系统开发流程北京搜索引擎优化seo
  • 做选择的网站首页百度关键词快速优化
  • 公司网站数据库表设计网站seo是什么
  • 自己做网站 需要哪些如何开网站呢
  • 网站开发平台开发公司电商网络推广怎么做
  • 网广州建网站站制作店铺运营
  • 网站建设相关视频专业网站制作网站公司
  • 高碑店做网站的公司百度关键词优化技巧
  • 深圳专业网站建设制作价格长沙seo培训
  • 上线啦 图谱智能网站百度推广登录官网入口
  • asp.net 项目成本预算系统的 网站开发seo代理
  • 电子商务中网站建设在线推广企业网站的方法有
  • 网站seo案例什么是网络营销与直播电商
  • 做童装批发网站怎么样快速网站轻松排名哪家好
  • 衡水网站建设电话网络营销的目的是
  • 网站正在建设中代码短视频seo关键词
  • 腾讯网站开发规范seo运营是什么意思
  • 云南昆明网站建设霸屏seo服务
  • 学做婴儿衣服的网站软文范例
  • 网站建设 www.y1web.comseo百科
  • 怎么做招投标网站杭州seo价格