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 ...
随机推荐
- kafka 重放 重播 从某个时间点或者offset开始消费
转自: https://www.jianshu.com/p/932663e9a226 consumer.subscribe(topicA); consumer.poll(100);//正常订阅topi ...
- Installation request for topthink/think-captcha ^3.0 -> satisfiable by topthink/think-captcha[v3.0.0].
ThinkPHP5.1安装图形验证码的时候报错: Problem 1 - Installation request for topthink/think-captcha ^3.0 -> sati ...
- solidity智能合约implicit conversion异常
问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题. 代码: require(tokenContract.balanceOf(this) >= _num ...
- 【分布式架构】--- 基于Redis组件的特性,实现一个分布式限流
分布式---基于Redis进行接口IP限流 场景 为了防止我们的接口被人恶意访问,比如有人通过JMeter工具频繁访问我们的接口,导致接口响应变慢甚至崩溃,所以我们需要对一些特定的接口进行IP限流,即 ...
- Python读写Excel文件的实例
最近由于经常要用到Excel,需要根据Excel表格中的内容对一些apk进行处理,手动处理很麻烦,于是决定写脚本来处理.首先贴出网上找来的读写Excel的脚本. 1.读取Excel(需要安装xlrd) ...
- Web前端基础(1):HTML(一)
1. HTML概述 1.1 什么是HTML HTML称为超文本标记语言,是一种标识性的语言.它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体.H ...
- Java日期时间API系列1-----Jdk7及以前的日期时间类
先看一个简单的图: 主要的类有: Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为 ...
- XSS攻击(跨站脚本攻击)
一.什么是XSS?怎么发生的? XSS(Cross site scripting)全称为跨站脚本攻击,是web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览 ...
- MySQL报错注入总结
mysql暴错注入方法整理,通过floor,UpdateXml,ExtractValue,NAME_CONST,Error based Double Query Injection等方法. 报错注入: ...
- BayaiM__MySQL 5.7 新特性详解
原创 作者:bayaim 时间:2016-06-15 11:40:50 122 0 阅读(22130) | 评论(43443) | 转发(3232 ...