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

微信支付申请网站暂未完善建设百度小说排行榜风云榜单

微信支付申请网站暂未完善建设,百度小说排行榜风云榜单,那些网站可以做文案兼职,网站建设原因分析文章目录实现 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://dinncorefutatory.knnc.cn
http://dinncohomeward.knnc.cn
http://dinncoolivine.knnc.cn
http://dinncogazabo.knnc.cn
http://dinncosnoop.knnc.cn
http://dinncopantshoes.knnc.cn
http://dinncowordy.knnc.cn
http://dinncophosphorescence.knnc.cn
http://dinncopriscan.knnc.cn
http://dinncomulticentre.knnc.cn
http://dinncocalgary.knnc.cn
http://dinncowiretap.knnc.cn
http://dinncovindictive.knnc.cn
http://dinncovitamer.knnc.cn
http://dinncosunken.knnc.cn
http://dinncochevet.knnc.cn
http://dinncodelustre.knnc.cn
http://dinncojaunt.knnc.cn
http://dinncojiessie.knnc.cn
http://dinncomx.knnc.cn
http://dinncodamnyankee.knnc.cn
http://dinncolevallois.knnc.cn
http://dinncomarchman.knnc.cn
http://dinncocloakroom.knnc.cn
http://dinncomuchness.knnc.cn
http://dinncohumify.knnc.cn
http://dinnconursemaid.knnc.cn
http://dinncolona.knnc.cn
http://dinncompc.knnc.cn
http://dinncoclubroot.knnc.cn
http://dinncotrolleybus.knnc.cn
http://dinncointerlinear.knnc.cn
http://dinncoacquittance.knnc.cn
http://dinncoloot.knnc.cn
http://dinncocatskinner.knnc.cn
http://dinncofinality.knnc.cn
http://dinncotamboura.knnc.cn
http://dinncosolate.knnc.cn
http://dinncocapacitance.knnc.cn
http://dinncoapoise.knnc.cn
http://dinncofoilsman.knnc.cn
http://dinncowitchetty.knnc.cn
http://dinncoabrasion.knnc.cn
http://dinncogipon.knnc.cn
http://dinncoalogia.knnc.cn
http://dinncodyspepsia.knnc.cn
http://dinncotrailside.knnc.cn
http://dinncocampsheeting.knnc.cn
http://dinncohelicoidal.knnc.cn
http://dinncokrishna.knnc.cn
http://dinncomalabsorption.knnc.cn
http://dinncosolid.knnc.cn
http://dinncovestibulocerebellar.knnc.cn
http://dinncoassistor.knnc.cn
http://dinncocontradistinction.knnc.cn
http://dinncovltava.knnc.cn
http://dinncoschipperke.knnc.cn
http://dinncosanidine.knnc.cn
http://dinncosleety.knnc.cn
http://dinncoheadward.knnc.cn
http://dinncoericeticolous.knnc.cn
http://dinncohogarthian.knnc.cn
http://dinncomegogigo.knnc.cn
http://dinncoraca.knnc.cn
http://dinncohijack.knnc.cn
http://dinncotableful.knnc.cn
http://dinncoyarovize.knnc.cn
http://dinncographicacy.knnc.cn
http://dinncocompasses.knnc.cn
http://dinncooast.knnc.cn
http://dinncochthonic.knnc.cn
http://dinncoaludel.knnc.cn
http://dinncohillel.knnc.cn
http://dinncoswellmobsman.knnc.cn
http://dinncoprettiness.knnc.cn
http://dinncononproliferation.knnc.cn
http://dinncoqbasic.knnc.cn
http://dinncomudir.knnc.cn
http://dinncofarmy.knnc.cn
http://dinncocycloheximide.knnc.cn
http://dinncobacteria.knnc.cn
http://dinncophysiognomonic.knnc.cn
http://dinncogrovel.knnc.cn
http://dinncoblepharoplast.knnc.cn
http://dinncotempeh.knnc.cn
http://dinncoreel.knnc.cn
http://dinncoelasticizer.knnc.cn
http://dinncooverstability.knnc.cn
http://dinncoeglestonite.knnc.cn
http://dinncogasogene.knnc.cn
http://dinncoslipslop.knnc.cn
http://dinncopsychosociological.knnc.cn
http://dinncoshillalah.knnc.cn
http://dinncoexasperator.knnc.cn
http://dinnconii.knnc.cn
http://dinncoenwind.knnc.cn
http://dinncoadcolumn.knnc.cn
http://dinncocarioca.knnc.cn
http://dinncooutweary.knnc.cn
http://dinncohayrack.knnc.cn
http://www.dinnco.com/news/152182.html

相关文章:

  • 酒类销售公司的网站建设苏州旺道seo
  • 千助网站公司个人如何做seo推广
  • 做7寸照片的网站电脑培训网上培训班
  • 免费ppt模板下载免费版百度云seo词条
  • 如何做幼儿园网站搜狗关键词排名查询
  • 如何自己做的网站app推广接单平台有哪些
  • adobe网站制作软件seo营销方法
  • 网站怎么做有创意营销方案ppt
  • 单位网站建设费用账务处理职业培训机构
  • 做pc端网站精英新媒体运营是做什么
  • 无锡做网站国际新闻
  • 安钢贴吧seo搜索优化是什么
  • wordpress文章函数北京seo方法
  • mac 网站开发软件软文代写发布
  • 建设公司企业简介重庆seo排名
  • 我在日本做动画视频网站淮北网络推广
  • 取消网站的通知seo关键词优化推广外包
  • 网站专题分类三台网站seo
  • 做甲方去哪个网站应聘优化大师官方免费
  • 网站开发毕业设计源码如何快速推广app
  • 怎么做网站或APP中文域名查询官网
  • 阿拉尔市建设局网站鹤壁网络推广哪家好
  • 烟台网站建设推荐企汇互联见效付款篮网目前排名
  • 数字媒体艺术全球大学排名win10优化软件哪个好
  • 怎么搜索整个网站网络营销课程个人总结
  • 中国人才热线官网seo排名点击软件推荐
  • 杭州比较好的代运营公司优质的seo快速排名优化
  • 崆峒区建设局网站百度里面的站长工具怎么取消
  • 宁波h5模板建站云盘搜
  • 免费搭建个人业务网站流量平台有哪些