找出字符串中第一个匹配项的下标-力扣

 纯自己手写
 

int strStr(char* haystack, char* needle) {int haylen=strlen(haystack);int nelen=strlen(needle);if(strlen(haystack)<strlen(needle)) return -1;int slow=0;//用于标记从haystack哪个字符开始比较int fast=0;//用于标记haystack中正在进行比较的字符int ne=0;//用于标记needle比较的字符int count=0;//标记前面字符是否匹配int temp;//输出的结果while(fast<haylen&&ne<nelen){if(haystack[fast]!=needle[ne]){//字符不相同时if(count==1){//表示前面字符都匹配,但现在比较的字符中途不匹配fast=++slow;//重新从haystack中上一次比较的第一个字符的后一个字符开始ne=0;//重新从needle的第一个字符开始count=0;//标记前面没有匹配成功的字符continue;//结束本次循环,重新从while开始}slow++;//若前面字符没有匹配成功,标记下一次比较的开始字符fast++;//从haystack的下一个字符开始比较temp=-1;//未匹配结果}else{	if(count==0) temp=fast;//用于确定输出为第一次匹配的下标fast++;//若前面字符匹配比较下一个字符ne++;//若前面字符匹配比较下一个字符count=1;//标记前面有匹配的字符}	}if(ne!=(nelen)) temp=-1;//用于判断haystack后面几个字符与needle前面部分字符匹配成功,但是haystack已经没有字符可以比较,needle并没有比较完成,所以匹配失败。(若最后匹配的字符与needle长度不等说明匹配失败。)return temp;}

int haylen=strlen(haystack);
    int nelen=strlen(needle);
    if(strlen(haystack)<strlen(needle)) return -1;
    int slow=0;//用于标记从haystack哪个字符开始比较
    int fast=0;//用于标记haystack中正在进行比较的字符
    int ne=0;//用于标记needle比较的字符
    int count=0;//标记前面字符是否匹配
    int temp;//输出的结果
    while(fast<haylen&&ne<nelen){
        if(haystack[fast]!=needle[ne]){//字符不相同时
            if(count==1){//表示前面字符都匹配,但现在比较的字符中途不匹配
                fast=++slow;//重新从haystack中上一次比较的第一个字符的后一个字符开始
                ne=0;//重新从needle的第一个字符开始
                count=0;//标记前面没有匹配成功的字符
                continue;//结束本次循环,重新从while开始
            }
            slow++;//若前面字符没有匹配成功,标记下一次比较的开始字符
            fast++;//从haystack的下一个字符开始比较
            temp=-1;//未匹配结果
        }else{    
            if(count==0) temp=fast;//用于确定输出为第一次匹配的下标
            fast++;//若前面字符匹配比较下一个字符
            ne++;//若前面字符匹配比较下一个字符
            count=1;//标记前面有匹配的字符
            
        }    
    }
    if(ne!=(nelen)) temp=-1;//用于判断haystack后面几个字符与needle前面部分字符匹配成功,但是haystack已经没有字符可以比较,needle并没有比较完成,所以匹配失败。(若最后匹配的字符与needle长度不等说明匹配失败。)
    return temp;


int slow=0;//用于标记从haystack哪个字符开始比较

int fast=0;//用于标记haystack中正在进行比较的字符

    int ne=0;//用于标记needle比较的字符

    int count=0;//标记前面字符是否匹配

    int temp;//输出的结果

最后if(ne!=(nelen)) temp=-1;//用于判断haystack后面几个字符与needle前面部分字符匹配成功,但是haystack已经没有字符可以比较,needle并没有比较完成,所以匹配失败。(若最后匹配的字符与needle长度不等说明匹配失败。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣日记3.18-【贪心算法篇】122. 买卖股票的最佳时机 II

力扣日记&#xff1a;【贪心算法篇】122. 买卖股票的最佳时机 II 日期&#xff1a;2024.3.18 参考&#xff1a;代码随想录、力扣 122. 买卖股票的最佳时机 II 题目描述 难度&#xff1a;中等 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。…

AI大模型额外学习一:斯坦福AI西部世界小镇笔记(包括部署和源码分析)

文章目录 一、简单介绍1&#xff09;项目代码介绍2&#xff09;重新播放模拟3&#xff09;适当修改分叉模拟 二、部署斯坦福小镇Demo1&#xff09;准备工作2&#xff09;解决遇到的bug3&#xff09;启动服务器和前端 三、源码剖析1&#xff09;主题顺序 github链接 一、简单介…

08|记忆:通过Memory记住客户上次买花时的对话细节

无论是LLM还是代理都是无状态的&#xff0c;每次模型的调用都是独立于其他交互的。也就是说&#xff0c;我们每次通过API开始和大语言模型展开一次新的对话&#xff0c;它都不知道你其实昨天或者前天曾经和它聊过天了。 使用ConversationChain from langchain import OpenAI…

1.gradle编译和运行

1.在Windows 项目的根目录下使用.\gradlew.bat build命令进行编译。 如果出错的原因是连接超时&#xff1a; Exception in thread “main” java.io.IOException: Downloading from https://services.gradle.org/distributions/gradle-8.6-bin.zip failed: timeout (10000ms) a…

【华为OD机试】找座位【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要, 要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出, 在不移…

嵌入式会越来越卷吗?

嵌入式会越来越卷吗? 当谈及嵌入式系统时&#xff0c;我们探究的不仅是一种科技&#xff0c;更是一个日益多元与普及的趋势。嵌入式系统&#xff0c;作为一种融入更大系统中的计算机硬件和软件&#xff0c;旨在执行特定功能或任务。但这个看似特定的系统概念&#xff0c;却在发…

黑马程序员——javase进阶——day09——线程安全,死锁,状态,通讯,线程池

目录&#xff1a; 线程安全 线程安全产生的原因线程的同步同步代码块同步方法Lock锁线程死锁 概述:产生条件:代码实践线程的状态线程通信线程池 线程使用存在的问题线程池的介绍线程池使用的大致流程线程池的好处Java提供好的线程池线程池处理Runnable任务线程池处理Callable任…

LeetCode刷题记录:(11)组合(初识回溯算法)

leetcode传送通道 暂时记录&#xff0c;这篇没啥营养&#xff0c;不用看了 class Solution {List<List<Integer>> result new ArrayList<>(); // 存所有组合List<Integer> path new LinkedList<>(); //存每一个组合public List<List<Int…

世界第一个AI软件工程师问世!

2024年3月13日&#xff0c;科技公司Cognition推出了世界上第一位人工智能软件工程师Devin AI。这项创新有望利用人工智能编码和机器学习的力量加快发展。Devin AI不仅仅是帮助&#xff1b;它是一个成熟的队友&#xff0c;发挥智能编码自动化和自主人工智能编码的魔力&#xff0…

SQL注入无回显,利用DNSlog构造方式

没有回显的情况下&#xff0c;一般编写脚本&#xff0c;进行自动化注入。但与此同时&#xff0c;由于 防火墙的存在&#xff0c;容易被封禁 IP&#xff0c;可以尝试调整请求频率&#xff0c;有条件的使用代理池进行请求。 此时也可以使用 DNSlog 注入&#xff0c;原理就是把服…

salesforce生产环境如何删除触发器

由于生产环境不能直接删除触发器&#xff0c;所以需要在sandbox中先让触发器inactive再部署到生产环境&#xff0c;就可以让触发器失效了。

C++基础6:面向对象程序设计思想和类(上)

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 6.面向对象程序设计思想和类 6.1 程序设计思想 6.1.1 结构化…

春招第一面-京东

宝子们&#xff0c;卷起来吧&#xff01; 1、自我介绍 2、实习项目 3、实习项目分库分表怎么做的&#xff1f; 4、分布式主键用的是什么&#xff1f;雪花ID是怎么样的&#xff0c;有什么问题&#xff1f; 5、实习业务具体是干嘛 6、你们这个业务为啥不用es&#xff0c;如…

vscode中自动生成python的UML类图的插件

需求&#xff1a; 阅读一些源码时&#xff0c;想直观的看一下它的UML类关系图。 搜索发现已有相关的软件可以实现这个功能。 Linux系统&#xff1a; 安装pylint pip3 install pylint 使用pyreverse命令 pyreverse -ASmy -o png test.py 生成名为classes.png的UML类图 参考…

苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)

苍穹外卖-day08 课程内容 导入地址簿功能代码用户下单订单支付 功能实现&#xff1a;用户下单、订单支付 用户下单效果图&#xff1a; 订单支付效果图&#xff1a; 1. 导入地址簿功能代码&#xff08;单表crud&#xff09; 1.1 需求分析和设计 1.1.1 产品原型&#xff08…

苍穹外卖-day04:项目实战-套餐管理(新增套餐,分页查询套餐,删除套餐,修改套餐,起售停售套餐)业务类似于菜品模块

苍穹外卖-day04 课程内容 新增套餐套餐分页查询删除套餐修改套餐起售停售套餐 要求&#xff1a; 根据产品原型进行需求分析&#xff0c;分析出业务规则设计接口梳理表之间的关系&#xff08;分类表、菜品表、套餐表、口味表、套餐菜品关系表&#xff09;根据接口设计进行代…

rocky9 编写一键安装mysql 的sh脚本

基本操作步骤 1、虚拟机最小化安装rocky9系统&#xff0c;安装后克隆一个系统&#xff1b;1个用来获取下载的rpm包&#xff0c;一个用来编写sh 测试脚本&#xff1b; 2、修改虚拟机的 yum配置文件&#xff0c;获取获取rpm程序 &#xff1a;启用缓存&#xff0c;并修改yum下载…

比特币,区块链及相关概念简介(二)

目录 什么是挖矿挖矿是否代表资源浪费为什么挖矿能维持比特币网络安全性&#xff1f;是怎么做到的呢&#xff1f;该系列文章链接 以下内容结合了chatgpt 3.5以及网络文章。 用于学习记录。 简介&#xff1a; 介绍了什么是挖矿&#xff0c;挖矿是否代表资源浪费&#xff0c;挖矿…

四个按键控制数码管分别显示6,8 ,A,F

#include<reg52.h> typedef unsigned int u16; //重新定义系统默认数据类型 typedef unsigned char u8; #define SMG_A_DP_PORT P0 //使用宏定义定义P0端口&#xff0c;数码管段码口 …

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…