28. Implement strStr() [easy] (Python)
来源:互联网 发布:淘宝待评价怎么消除 编辑:程序博客网 时间:2024/05/23 16:39
题目链接
https://leetcode.com/problems/implement-strstr/
题目原文
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题目翻译
实现 strStr() 函数。该函数用于判断一个字符串 needle 是否是另一个字符串 haystack 的子串。如果是,则该函数返回 needle 在 haystack 中首次出现的地址;否则,返回-1。
思路方法
思路一
既然是要求自己实现strStr函数,那么用库函数string.find()就不合适了吧。。。虽然不合适,也放在这里供参考吧。
代码
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ return haystack.find(needle)
思路二
扫描haystack,当遇到与needle首字符相同的位置时,检查haystack从该位置开始的与needle长度相同的块,与needle是否相同。
代码
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ if not needle: return 0 for i in xrange(len(haystack) - len(needle) + 1): if haystack[i] == needle[0]: j = 1 while j < len(needle) and haystack[i+j] == needle[j]: j += 1 if j == len(needle): return i return -1
思路三
利用类似substring的方法简化上面的代码。
代码
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ for i in xrange(len(haystack) - len(needle) + 1): if haystack[i:i+len(needle)] == needle: return i return -1
思路四
鉴于这是一个模式匹配问题,我们可以考虑KMP算法。该算法对于任何模式和目标序列,都可以在线性时间内完成匹配查找(O(n+m)),而不会发生退化。这里不再细讲算法原理,只实现了代码。
代码
class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ if not needle: return 0 #generate next array, need O(n) time i, j, m, n = -1, 0, len(haystack), len(needle) next = [-1] * n while j < n - 1: #needle[k] stands for prefix, neelde[j] stands for postfix if i == -1 or needle[i] == needle[j]: i, j = i + 1, j + 1 next[j] = i else: i = next[i] #check through the haystack using next, need O(m) time i = j = 0 while i < m and j < n: if j == -1 or haystack[i] == needle[j]: i, j = i + 1, j + 1 else: j = next[j] if j == n: return i - j return -1
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51708389
0 0
- 28. Implement strStr() [easy] (Python)
- 28. Implement strStr() [easy]
- 【Easy】28. Implement strStr()
- [LeetCode] 028. Implement strStr() (Easy) (C++/Python)
- Easy-题目57:28. Implement strStr()
- Leetcode 28. Implement strStr() (Easy) (cpp)
- Leetcode[easy] - Implement strStr()
- [leetcode:python]28.Implement strStr()
- LeetCode-Easy-Java-Implement strStr()
- Leet Code OJ 28. Implement strStr() [Difficulty: Easy]
- Leetcode-Implement strStr()-Python
- 【Leetcode】【python】Implement strStr()
- LeetCode--Implement strStr() Python
- LeetCode-28-Implement strStr()(Sting/穷举)-Easy
- Easy 9 Implement strStr()(28)
- LeetCode OJ 28 Implement strStr() [Easy]
- (算法分析Week6)Implement strStr()[Easy]
- LeetCode-Easy刷题(9) Implement strStr()
- SVN-之Clean up失败
- 【leetCode】Binary Tree Zigzag Level Order Traversal python实现
- Android中关于Dialog滑动弹出的简单动画的设置
- 工作随想
- 转发和重定向的区别
- 28. Implement strStr() [easy] (Python)
- lsd-slam源码解读第二篇:DataStructures
- JAVA集合框架Collection
- 打印1到最大的n位数
- Atom 学习
- Linux 系统中安装网卡驱动时出现"设备eth0似乎不存在"解决办法
- C#最短路径算法demo
- 虚拟机中设置网络
- LeetCode 361