LeetCode28——实现strStr()
6月中下旬辞职在家,7 月份无聊的度过了一个月。8 月份开始和朋友两个人写项目,一个后台和一个 APP ,APP 需要对接蓝牙打印机。APP 和蓝牙打印机都没有搞过,开始打算使用 MUI 开发 APP ,这样学习成本会低一些。但是蓝牙打印机的供应商不提供打印机的指令集,只提供了原生 Android 的 SDK ,因此无奈必须要学习 Android 的原生开发。8 月份加油啊!
LeetCode 题库的第 28 题——实现strStr()
题目如下:

解题代码
该题就是两层循环,第一层循环主要是遍历字符串,第二层循环用来进行匹配。实现代码如下:
int strStr(char* haystack, char* needle) {
int pos = -;
int str1len = strlen(haystack);
int str2len = strlen(needle);
int i, n, j;
if ( str2len == ) {
return ;
}
for ( i = ; i < str1len; i ++ ) {
n = i;
for ( j = ; j < str2len; j ++ ) {
if ( haystack[n++] == needle[j] ) {
if ( j == str2len - ) {
pos = i;
goto EXIT;
}
} else {
break;
}
}
}
EXIT:
return pos;
}
以上是我的解题代码,就是使用两层来进行实现,没有太好的思路,所以解题思路就没什么可说的了。上面的代码,其实还可以减少循环的次数,但是会增加一些代码量,LeetCode 对以上代码执行的时间显示为 1800 多毫秒。那么就增加一个判断,让循环次数少一些,增加的代码如下:
for ( i = ; i < str1len; i ++ ) {
if ( str1len - i < str2len ) {
return pos;
}
n = i;
for ( j = ; j < str2len; j ++ ) {
if ( haystack[n++] == needle[j] ) {
if ( j == str2len - ) {
pos = i;
goto EXIT;
}
} else {
break;
}
}
}
看上面的代码,只是在第一层的 for 循环中增加了一个判断,但是 LeetCode 给出的执行时间是 0 毫秒,是不是很惊人?为什么会这样呢?原因其实很简单,当 needle 很短的时候这个判断是没有太大差别的,但是当 needle 特别长的时候,减少的循环次数就非常明显了。
我的微信公众号:“码农UP2U”

LeetCode28——实现strStr()的更多相关文章
- LeetCode28 Implement strStr()
题目: Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if ne ...
- [Swift]LeetCode28. 实现strStr() | Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- leetcode-28.实现strStr()
leetcode-28.实现strStr() 题意 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字 ...
- LeetCode28.实现strStr()
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- LeetCode28.实现strStr() JavaScript
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- leetcode28 strstr kmp bm sunday
字符串匹配有KMP,BM,SUNDAY算法. 可见(https://leetcode-cn.com/problems/implement-strstr/solution/c5chong-jie-fa- ...
- [PHP源码阅读]strpos、strstr和stripos、stristr函数
我在github有对PHP源码更详细的注解.感兴趣的可以围观一下,给个star.PHP5.4源码注解.可以通过commit记录查看已添加的注解. strpos mixed strpos ( strin ...
- [LeetCode] Implement strStr() 实现strStr()函数
Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...
- strstr 函数的实现
strstr函数:返回主串中子字符串的位置后的所有字符. #include <stdio.h> const char *my_strstr(const char *str, const c ...
随机推荐
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7
18.6 PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...
- java线程join方法使用方法简介
本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的 如图所示代码,是并行执行的 public class ThreadTest { ...
- C++入门到理解阶段二基础篇(1)——简介与环境安装
1.C++ 简介 C++ 是一种静态类型的.编译式的.通用的.大小写敏感的.不规则的编程语言,支持过程化编程.面向对象编程和泛型编程. C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点. ...
- 死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什么默认是非公平模式? (4)ReentrantLock除了可重入还有哪些特性? 简介 ...
- WPF/.net core WPF 系统托盘支持
WPF 原生不支持系统托盘图标,需要依靠其它方式处理. 1 使用 WinForm 的支持 WPF最小到系统托盘 - Arvin.Mei - 博客园 2 使用 wpf-notifyicon 库 hard ...
- go-爬虫-百度贴吧(并发版)
爬取百度贴吧的网页 非并发版 package main import ( "fmt" "io" "net/http" "os&qu ...
- Python3---爬虫Post传参
前言 Python3 Post 传参主要用到的是urllib.request.urlopen(url,data)参数当中data.data参数主要是设置post的传参. 修改时间:20191218 天 ...
- RPM包安装——手动安装
RPM包安装 手动安装 挂载光盘 首先查看光盘是否挂载(使用mount命令) RPM包存放位置 在你光盘挂载点的Packages目录下 使用 ll | grep 关键字 可以快速找到你想要的RPM包 ...
- NetCoreAPI添加Swagger
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; ...
- rabbitmq多消费者
rabbitmq多消费者处理 当rabbitmq拥有多个消费者时,队列收到的消息将以轮询(round-robin)的分发方式发送给消费者.每条消息只会发送给订阅列表里的一个消费者.这种方式非常适合扩展 ...