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

南京电商网站建设公司排名旅游网站建设公司

南京电商网站建设公司排名,旅游网站建设公司,wordpress 段落显示,运行怎么卸载wordpress题目链接 题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入&…

题目链接

题目描述

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

示例 1:

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

输入:haystack = “leetcode”, needle = “leeto”
输出:-1
解释:“leeto” 没有在 “leetcode” 中出现,所以返回 -1 。

提示:

1 <= haystack.length, needle.length <= 104
haystack 和 needle 仅由小写英文字符组成

题解

1.暴力解法

思路:

  • 双指针扫描:
    – i指针遍历主串
    – j指针遍历模式串
  • 逐字符比对
    –当 haystack[i] == needle[j] 时,双指针共同前进
    –出现不匹配时,i 回溯到本次匹配的起始位置+1,j 重置为0
  • 终止条件
    –若 j 走完整个模式串 → 匹配成功,返回 i-j
    –若 i 走完主串但 j 未走完 → 匹配失败,返回-1
    请添加图片描述

自己写

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

问题在于while(i<=haystack.size()-needle.size())
我本来的想法是当主串剩余的字符数比子串还少时,肯定不能匹配成功了,但是在匹配过程中i可能会大于haystack.size()-needle.size()

正确版本代码

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

KMP算法

核心难点在于求Next数组,Next数组用于next数组用于记录模式串中每个位置的最长公共前后缀长度

求next数组思路

  • 初始化Next数组
  • 处理元素不相同情况
  • 处理元素相同情况
  • 更新next数组

strStr函数思路

  • 初始化:
    主串指针i = 0,模式串指针j = 0。
    调用getNext函数构造next数组。
  • 匹配逻辑:
    遍历主串haystack:
    –如果j > 0且haystack[i] != needle[j],说明当前字符不匹配,模式串指针j回溯到next[j - 1]。
    –如果haystack[i] == needle[j],说明当前字符匹配,j加1。
    –如果j等于模式串的长度(j == needle.size()),说明模式串完全匹配,返回匹配的起始位置i - j + 1
  • 返回值:
    如果匹配成功,返回模式串在主串中的起始位置。
    如果匹配失败,返回-1。

代码书写

class Solution {
public:void getNext(int*next,const string& s){//1.初始化next[0]=0;int i=1,j=0;for(i=1;i<s.size();i++){//2.处理不相同 回溯while(j>0&&s[i]!=s[j]){j=next[j-1];}//3.处理相同if(s[i]==s[j])j++;//4.更新Next数组next[i]=j;}} int strStr(string haystack, string needle) {//i作为主串的指针,j作为模式串的指针int i=0,j=0;vector<int> next(needle.size());getNext(&next[0],needle);for(;i<haystack.size();i++){while(j>0&&haystack[i]!=needle[j]){j=next[j-1];}if(haystack[i]==needle[j])j++;if(j==needle.size()){return i-j+1;}}return -1;}
};
易错点
  • 求next数组时,在处理不相同情况while(j>0&&s[i]!=s[j])是使用while而不是if
    请添加图片描述


文章转载自:

http://jfXENtIc.zcnfm.cn
http://XeLtFDUf.zcnfm.cn
http://er8X0GLI.zcnfm.cn
http://Dh8Mr6Nf.zcnfm.cn
http://dS1XhKKQ.zcnfm.cn
http://7M78REjh.zcnfm.cn
http://Gsrq5Ip2.zcnfm.cn
http://U3wIK67Z.zcnfm.cn
http://PI5Yc0wy.zcnfm.cn
http://DKnlppjJ.zcnfm.cn
http://6CY5PAje.zcnfm.cn
http://zmByhJLj.zcnfm.cn
http://LamIgiCC.zcnfm.cn
http://EIwmiEnx.zcnfm.cn
http://Yp34wESQ.zcnfm.cn
http://7RFuX7XG.zcnfm.cn
http://ggTYk3j9.zcnfm.cn
http://UPfEU2ja.zcnfm.cn
http://SE1JKGfD.zcnfm.cn
http://r4W7Dk0o.zcnfm.cn
http://cBQwX7MN.zcnfm.cn
http://hlP2OG7r.zcnfm.cn
http://3oZ4heJu.zcnfm.cn
http://XnPJWU9W.zcnfm.cn
http://IPUTSl6D.zcnfm.cn
http://h95VdJtj.zcnfm.cn
http://4Ld8QW5w.zcnfm.cn
http://F6mu83h9.zcnfm.cn
http://fVMr1eVK.zcnfm.cn
http://kH29WPzA.zcnfm.cn
http://www.dtcms.com/wzjs/633503.html

相关文章:

  • 国外app素材网站psd网页模板免费下载
  • 公司网站制作费用wordpress博客简书
  • 桥头镇网站建设网站后台管理产品排序
  • 网站运营队伍与渠道建设如何高效的完成网站建设步骤
  • wordpress仿站js如何导入商城分销系统
  • 国内企业网站设计西安建公司网站
  • 一个小型购物网站开发甜品店网站开发背景
  • 怎么写代码做网站企业文化墙设计图效果图
  • 基于thinkphp网站制作广告设计是什么专业类别
  • 做网站是不是要域名费一般网站维护费用
  • 手机号码网站建设关键词优化外包服务
  • 福州做网站建设wordpress插件水印
  • 松江新城网站建设.网站开发工具dw
  • 做华为网站的还有哪些功能python培训机构哪家好
  • 网站的关键词报价的网站中文网站建设解决方案
  • 安徽网站建设产品介绍godaddy网站建设
  • 福州做网站互联网公司宿城网站建设
  • 沟通交流类网站有哪些广东宣布即时优化调整
  • 在重庆 那里可以做诚信网站认证河南住房建设厅网站
  • 怎么在运行打开wordpress网站针对爬虫爬取做的优化
  • 网站建设培训教程微信网站界面设计
  • 网站开发可以申请著作权吗网站做编辑
  • 西峰住房和城乡建设局网站网站如何制作注册
  • 做个公司网站大概多少钱网站建设专用图形库
  • 用word文档做网站wordpress段首空格
  • 上海建设网站便宜的桐乡网站二次开发
  • 门户网站建设收费重庆沙坪坝网站建设
  • 怎么开个人网站赚钱好订单网服装加工接单
  • 秦皇岛网站设计做宠物网站
  • 花生壳申请了域名 怎么做网站公司网站制作流程