Leetcode 28. Implement strStr()
来源:互联网 发布:网络棋牌游戏算赌博吗 编辑:程序博客网 时间:2024/06/11 07:30
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
这道题目主要有这三种方法。在Leetcode上并没有展现KMP和BM算法的优势,应该与OJ的测试样例有关;
暴力解法时间复杂度 O(MN), KMP 为 O(M+N), BM 为 O(N/M)
暴力解法:
class Solution {public: int strStr(string haystack, string needle) { int m = haystack.length(), n = needle.length(); if (!n) return 0; for (int i = 0; i < m - n + 1; i++) { int j = 0; for (; j < n; j++) if (haystack[i + j] != needle[j]) break; if (j == n) return i; } return -1; }};
KMP算法:
int strStr(string haystack, string needle) { int nsize = needle.size(); int hsize = haystack.size(); if (nsize == 0) return 0; int *table = new int[nsize]; memset(table, 0, sizeof(int)*nsize); //building match table for (int i = 1, j = 0; i < nsize - 1;){ if (needle[i] != needle[j]){ if (j>0){ j = table[j - 1]; } else{ i++; } } else{ table[i] = j + 1; i++; j++; } } //matching for (int i = 0, match_pos = 0; i < hsize;){ if (haystack[i] == needle[match_pos]){ if (match_pos == nsize - 1){ return i - (nsize - 1); } else{ i++; match_pos++; } } else{ if (match_pos == 0){ i++; } else{ match_pos = table[match_pos - 1]; } } } delete[]table; return -1; }
BM算法:
public class Solution {public String strStr(String haystack, String needle) { if(haystack== null) return null; if(needle==null || needle.length()==0) return haystack; if(needle.length()>haystack.length()) return null; int pat_length = needle.length(); int right[] = new int[256]; for(int i=0;i<256;i++) right[i] =-1; for(int i=0;i<pat_length;i++) right[needle.charAt(i)] =i; int rtn = search(right,haystack,needle); if(rtn == haystack.length()) return null; else return haystack.substring(rtn);}public int search(int[] right, String haystack,String needle){ int M = haystack.length(); int N = needle.length(); int i,j; int skip =0; for(i=0; i<=M-N; i+=skip) { skip =0; for(j=N-1;j>=0;j--) { if(needle.charAt(j)!=haystack.charAt(i+j)) { skip = j-right[haystack.charAt(j+i)]; if(skip<=0) skip=1; break; } } if(skip ==0) return i; } return M;}
0 0
- [LeetCode]28.Implement strStr()
- LeetCode --- 28. Implement strStr()
- LeetCode 28.Implement strStr()
- [Leetcode] 28. Implement strStr()
- 【leetcode】28. Implement strStr()
- [leetcode] 28.Implement strStr()
- Leetcode-28.Implement strStr()
- 28. Implement strStr() LeetCode
- leetcode 28. Implement strStr()
- [LeetCode]28. Implement strStr()
- leetcode 28. Implement strStr()
- Leetcode 28. Implement strStr()
- leetcode 28.Implement strStr()
- LeetCode *** 28. Implement strStr()
- LeetCode 28. Implement strStr()
- leetcode-28. Implement strStr()
- leetcode 28. Implement strStr()
- leetcode 28. Implement strStr()
- 欢迎使用 Cmd Markdown 编辑阅读器
- 利率问题
- 并发编程学习总结(六) :java 显式锁ReentrantLock使用详解之测试锁与超时
- 怎样高效统计Android开源库的方法数
- Mysql5.6.23免安装配置
- Leetcode 28. Implement strStr()
- POJ 3620 Avoid The Lakes
- 发布Maven项目到Tomcat中
- iOS 学习之分段Table View的使用(Grouped样式表格)
- 分布式事务
- Solr调研总结
- Android真机连接Android studio或Eclipse输出不了日志问题
- 项目 clean
- python 的数据结构