内容简介:题干如下:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
实现 strStr(Implement-StrStr)
题干如下:
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = "hello", needle = "ll"
输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba"
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C语言 的 strstr() 以及 Java 的 indexOf() 定义相符。
来源:力扣
本题有很多种解题方式,为了再巩固一下 双指针解题思路 这题我们还是选用这种思路来解。
建议再结合 让我们一起啃算法----移除元素 和 让我们一起啃算法----删除 排序 数组中的重复项 两篇文章仔细体会一下 双指针思路 。
解题思路
初始化 i 指向 needle 字符串的第一个字符, j 指向 haystack 字符串的第一个字符。比较 needle[i] 与 haystack[j] 的字符是否相等:相等则 i++、j++ ;不想等则 i 重新指向 needle 字符串的第一个字符, j 指向上一次初始位置的后一个字符。
注: j 指向上一次初始位置的后一个字符的计算方式为: j = j - i + 1。可以自己造个数组,推算一下这个规律哟。
流程图如下:
代码实现
GO语言实现
func strStr(haystack string, needle string) int { // 子串为空则返回 0 if needle == "" { return 0 } i := 0 j := 0 for j < len(haystack) { // 判断 haystack[j] 与 needle[i] 是否相等,不想等,则 i 重新指向 needle 字符串的首字符,即 i = 0 // j 指向 j上一次初始化的后一个字符串,即 j = j - i + 1 if haystack[j] != needle[i] { j = j - i + 1 i = 0 } else { // haystack[j] 与 needle[i] 相等,则先判断 i 是否已经最大 // 是的话就返回 needle 在 haystack 的第一个位置,计算方式: j - i if i == len(needle) -1 { return j - i } // 如果 i 不是 needle 的最大索引,那么 j 向后移动一位,i 向后移动一位,继续比较 j++ i++ } } // j 越界了,说明不存在子串 needle,即返回 -1 return -1 }
总结
欢迎关注我们的微信公众号,每天学习 Go 知识
以上所述就是小编给大家介绍的《让我们一起啃算法---- 实现 strStr》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 图算法|Dijkstra算法python实现
- 算法:经典排序算法的 Go 实现
- js实现数据结构及算法之排序算法
- 算法 - 06 | 链表(上):如何实现LRU缓存淘汰算法?
- Twitter雪花算法SnowFlake算法的java实现
- js实现多种排序算法(算法导论第二章)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
DIV+CSS网站布局从入门到精通
2011-1 / 58.00元
《DIV+CSS网站布局从入门到精通》介绍了商业类型的网页设计,以及目前流行的div+CSS标准布局方法和实战技法。通过十个经典案例,分别从不同类型网站的布局风格以及实现方法来讲解div+CSS网页布局和制作方法。全书系统地讲解了CSS样式的基础理论和实际运用技术,并结合实例来讲解层叠样式表与层布局相结合制作网页的方法。在实例制作过程中除了介绍CSS样式设计各方面的知识外,还结合实际网页制作中可能......一起来看看 《DIV+CSS网站布局从入门到精通》 这本书的介绍吧!