Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Swift 实现strStr() - LeetCode

Swift 实现strStr() - LeetCode

作者头像
韦弦zhy
发布于 2018-09-11 03:59:47
发布于 2018-09-11 03:59:47
84700
代码可运行
举报
运行总次数:0
代码可运行

LeetCode.jpg

题目:实现strStr()
描述:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
说明:

needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf()(https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String%29) 定义相符。

案例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: haystack = "hello", needle = "ll"
输出: 2

案例2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: haystack = "aaaaa", needle = "bba"
输出: -1
方案一:第一个闪进我脑瓜子里面的就是切割字符串啦、、、、四行代码解决问题、、、
代码一:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func strStr(_ haystack: String, _ needle: String) -> Int {
    
    if needle.isEmpty {
        return 0
    }
    
    let array = haystack.components(separatedBy: needle)
    
    if array.first!.count == haystack.count {
        return -1
    }
    
    return array.first!.count
}
提交记录:

image.png

很打脸有木有。。。为什么要运行这么久????????哎,切割字符串底层实现我就不纠结了,但是想一想切割字符串的前提是不是要找到该字符串、、、既然找到了,这题就解决了、、、还去切什么切?

所以:

方案二:直接找字符串位置

1、needle判空

2、取两个字符串的长度,hLength,nLength

3、判断前者长度不小于后者

4、取长度的差,循环遍历,

5、在haystack中取nLength长度的字符,判断是否等于needle,有则返回

Swift中取范围内字符子串参考:Swift4 获取String子字符串

代码二:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func strStr(_ haystack: String, _ needle: String) -> Int {
    
    if needle.isEmpty {
        return 0
    }
    let hLength = haystack.count
    let nLength = needle.count
    if hLength < nLength {
        return -1
    }
    
    let threshold = hLength - nLength
    
    for i in 0...threshold {
        if (haystack[haystack.index(haystack.startIndex, offsetBy: i)..<haystack.index(haystack.startIndex, offsetBy: i + nLength)] == needle) {
            return i
        }
    }
    
    return -1
}
提交记录:

image.png

快了不是一星半点啊、、、、

用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode - #28 实现 strStr()
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/04/04
2090
LeetCode - #28 实现 strStr()
28. 实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
张伦聪zhangluncong
2022/10/26
1660
Swift 数数并说 - LeetCode
1 被读作 "one 1" ("一个一") , 即 11。 11 被读作 "two 1s" ("两个一"), 即 21。 21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。 给定一个正整数 n ,输出报数序列的第 n 项。
韦弦zhy
2018/09/11
4590
Swift 数数并说 - LeetCode
【刷穿 LeetCode】28. 实现 strStr()(简单)
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
宫水三叶的刷题日记
2021/02/20
7890
LeetCode-28 实现strStr()
今天我们学习第28题实现strStr(),这个题目是一个典型的字符串匹配题目。我们先看看这道题的题目描述。
用户3470542
2019/06/26
7840
LeetCode-28 实现strStr()
LeetCode-28.实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
悠扬前奏
2020/09/14
4220
leetcode - 实现strStr()
给你两个字符串haystack和needle ,请你在haystack字符串中找出needle字符串出现的第一个位置(下标从0开始)。如果不存在,则返回-1。
江涛学编程
2021/04/23
3680
LeetCode 28. 实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。 如果不存在,则返回 -1。
Michael阿明
2022/11/26
3370
LeetCode - 实现strStr()
LeetCode第28题,难度简单。这题.怎么说呢,反正我的写法很简单,当然相对的就是运算速度有点慢。
晓痴
2019/08/19
5470
【小Y学算法】⚡️每日LeetCode打卡⚡️——15.实现 strStr()
给你两个字符串 haystack和 needle,请你在 haystack 字符串中找出 needle字符串出现的第一个位置(下标从 0 开始)。
呆呆敲代码的小Y
2021/08/23
2630
实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
_kyle
2020/11/03
7350
实现 strStr()
LeetCode题目28:实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
二环宇少
2020/08/13
3410
LeetCode题目28:实现strStr()
☆打卡算法☆LeetCode 28、实现 strStr() 算法解析
链接:28. 实现 strStr() - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
2640
☆打卡算法☆LeetCode 28、实现 strStr()  算法解析
Leetcode No.28 实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
week
2022/01/07
2010
LeetCode-28. 实现strStr()(java)
        看到这题的时候,我会心一笑,这道题不是很容易嘛,最让人想到的就是枚举字符串循环匹配,估计你们第一眼想到的也是这么个思路。具体实现思路如下:
bug菌
2023/05/27
1440
LeetCode-28. 实现strStr()(java)
实现 strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
用户4456933
2021/06/01
5370
28 实现 strStr() 函数
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
木瓜煲鸡脚
2021/01/18
5360
28 实现 strStr() 函数
Swift 罗马数字转整数 - LeetCode
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
韦弦zhy
2018/09/11
8970
Swift 罗马数字转整数 - LeetCode
算法养成记:实现 strStr()
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
三哥
2020/03/25
4030
力扣 (LeetCode)-28. 实现 strStr()|刷题打卡
Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者
达达前端
2021/03/22
5950
相关推荐
LeetCode - #28 实现 strStr()
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档