LeetCode #28. Implement strStr() 子串查找 解题报告
来源:互联网 发布:php.ini safe mode 编辑:程序博客网 时间:2024/05/22 03:48
1 解题思想
这道题嘛,说简单也简单,说难也难。。
题目也就是给一个母串,给一个子串。。问你母串包含子串么?
1、说他简单,是因为我们可以暴力法解决,而且这道题的规模,用暴力反似乎更快。。。暴力法就是直接两个训话比较
2、说他难呢。。毕竟这种题目在公司里面面试,都会让你有KMP吧,KMP理论上效率更高
KMP么,就是要算NEXT数组等。。这个我真说不清楚了(要画好多图,做不到啊。。。你们网上搜一下,我这看代码吧)
这里只留个题外话,未经推倒。。不过实验证实
一般情况下,如果两个串的长度不是特别大。。情况不是特别糟。。没必要用KMP。。。KMP要有冗长的next创建过程。。而暴力法的最坏情况也很难达到。。实际就是暴力法处理一般的strstr问题反而更快。
据说java标准库里的strstr也没用KMP
2 原题
原题
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
3 暴力法
public class Solution { //Method1:非KMP public int strStr(String haystack, String needle) { char[] subject=haystack.toCharArray(); char[] pattern=needle.toCharArray(); for(int i=0;i<=subject.length-pattern.length;i++){ boolean flag=true; for(int j=0;j<pattern.length;j++){ if(subject[i+j]!=pattern[j]){ flag=false; break; } } if(flag) return i; } return -1; }}
4 KMP法
public class Solution { //这是KMP版本的,记得Next和Partial的计算 public int strStr(String haystack, String needle) { if(needle.equals("")) return 0; //Partial和Next数组 char sub[]=haystack.toCharArray(); char pat[]=needle.toCharArray(); int next[]=new int[pat.length]; int partial[]=new int[pat.length]; //计算部分匹配 for(int i=1;i<pat.length;i++){ if(pat[partial[i-1]]==pat[i]){ partial[i]=partial[i-1]+1; } } //计算Next数组 for(int i=0;i<pat.length;i++){ next[i]=i+1-partial[i]; } int p=0,q=0,index=0; //开始比对 while(p<=sub.length-pat.length){ index=-1; while(index<pat.length-1 && sub[index+1+p]==pat[index+1+q]){ index++; } if(index==pat.length-1) return p; else{ p=p+next[q]; q=partial[q]; } } return -1; }}
0 0
- LeetCode #28. Implement strStr() 子串查找 解题报告
- [leetcode] 28. Implement strStr() 解题报告
- [Leetcode] 28. Implement strStr() 解题报告
- [LeetCode] Implement strStr() 解题报告
- Leetcode Implement strStr()解题报告
- Leetcode 28.Implement strStr() 解题报告【C库函数strstr()模拟-字符串中子串首次出现的地址】
- Leetcode 28. Implement strStr() KMP算法解题
- 28.LeetCode Implement strStr()(meidum)[字符串 子串匹配]
- LeetCode 28. Implement strStr()(实现子串定位)
- LeetCode | 28. Implement strStr()——寻找子串
- [LeetCode] 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()
- ScrollView嵌套ListView的问题与解决方案
- 堆排序C++实现
- 软考五:系统开发与运行
- 一个简单的Struts2应用
- 15电气一班刘思凡作业2
- LeetCode #28. Implement strStr() 子串查找 解题报告
- 设计模式之建造者模式
- 继承、 虚继承和虚函数表对类的大小的影响
- 翻煎饼 swustoj 254
- 卷首语
- 什么是IO多路复用
- bzoj1103[POI2007]大都市meg
- 码农小汪-剑指Offer之1- 跳台阶
- Android手机调用笔记本电脑的webservices