赞
踩
题目:
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
- Input: haystack = "hello", needle = "ll"
- Output: 2
Example 2:
- Input: haystack = "aaaaa", needle = "bba"
- Output: -1
Clarification:
What should we return when needle
is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle
is an empty string. This is consistent to C's strstr() and Java's indexOf().
采用KMP算法:详见文章strstr的实现--KMP
- class Solution {
- public:
- vector<int> getnext(string needle)
- {
- int n = needle.length();
- vector<int> lps(n,0);
- for(int i = 1,len = 0 ; i < n ;)
- {
- if(needle[i] == needle[len])
- lps[i++] = ++len;
- else if(len)
- {
- len = lps[len - 1];
- }else
- {
- lps[i++] = 0;
- }
- }
- return lps;
- }
- int strStr(string haystack, string needle) {
- int n = needle.length();
- if(n == 0)
- {
- return 0;
- }
- int h = haystack.length();
- if(h == 0)
- {
- return -1;
- }
-
- vector<int> next = getnext(needle);
- int i, j;
- for(i = 0,j = 0; i < h ;)
- {
- if(haystack[i] == needle[j])
- {
- i++;
- j++;
- }
- if(j == n)
- return i - j;
- if(i < h && haystack[i] != needle[j])
- {
- if(j > 0)
- {
- j = next[j -1];
- }
- else{
- i++;
- }
- }
- }
- return -1;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。