【LeetCode】028.Implement strStr()
2015-03-27 11:58
344 查看
题目:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
解答:
这是典型的字符串匹配问题,用KMP算法(不清楚的请自行百度),KMP算法的核心就是利用最长前缀串减少回溯次数。
OJ上这道题有个坑:patStr长度为0时,必须返回0,不论tarStr是否为空。
代码如下:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
解答:
这是典型的字符串匹配问题,用KMP算法(不清楚的请自行百度),KMP算法的核心就是利用最长前缀串减少回溯次数。
OJ上这道题有个坑:patStr长度为0时,必须返回0,不论tarStr是否为空。
代码如下:
import java.util.Vector; public class Solution { public int strStr(String haystack, String needle) { if(haystack == null || needle == null) return -1; if(needle.length() == 0) return 0; if(haystack.length() == 0) return -1; char[] tar = haystack.toCharArray(); char[] pattern = needle.toCharArray(); Vector<Integer> prefix = this.CptPrefix(pattern); int NOCM = 0; // Number of characters matched for (int i = 0; i < tar.length; i++) { while (NOCM > 0 && tar[i] != pattern[NOCM]) NOCM = prefix.elementAt(NOCM); if (tar[i] == pattern[NOCM]) NOCM++; if (NOCM == pattern.length) { // matched return i - pattern.length + 1; } } return -1; } public Vector<Integer> CptPrefix(char[] c) { if (c == null || c.length == 0) return null; int NOCM = 0; // Number of Character Matched int LOLP = 0; // Length of Longest Patter Vector<Integer> prefix = new Vector<Integer>(c.length); prefix.add(0); prefix.add(0); for (NOCM = 2; NOCM < c.length; NOCM++) { while (LOLP > 0 && c[NOCM-1] != c[LOLP]) LOLP = prefix.elementAt(LOLP); if (c[NOCM-1] == c[LOLP]) LOLP++; prefix.add(NOCM, LOLP); } return prefix; } }
相关文章推荐
- 【LeetCode】 028. Implement strStr()
- LeetCode 028 Implement strStr()
- LeetCode 028. Implement strStr()
- [LeetCode] 028. Implement strStr() (Easy) (C++/Python)
- Java for LeetCode 028 Implement strStr()
- 2017-09-17 LeetCode_028 Implement strStr()
- LeetCode 028 Implement strStr()
- LeetCode-028 Implement strStr()
- 【LeetCode-面试算法经典-Java实现】【028-Implement strStr() (实现strStr()函数)】
- LeetCode 028 Implement strStr()
- leetcode_c++:Implement strStr() (028)
- [LeetCode]题解(python):028-Implement strStr()
- LeetCode 28 Implement strStr()
- LeetCode 28: Implement strStr()
- LeetCode 28 Implement strStr()
- LeetCode--No.28--Implement strStr()
- leetcode Implement strStr()
- leetcode 28 -- Implement strStr()
- LeetCode:Implement strStr()
- LeetCode Implement strStr()