leetcode_28题——Implement strStr()(采用KMP算法,还没AC,但自己这边测试无误)

Implement strStr()

Total Accepted: 49294 Total Submissions: 223057My Submissions

Question Solution

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Update (2014-11-02):
The signature of the function had been updated to return the index instead of the pointer. If you still see your function signature returns a char * or String, please click the reload button  to reset your code definition.

Hide Tags

Two Pointers String

Have you met this question in a real interview?

Yes

No

Discuss

这道题是典型的KMP算法的字符串匹配的问题,但不知怎么了就是没AC,先计算匹配值,再采用KMP算法,可能是在计算匹配值时我用的法子太复杂了

所以导致超时间了

#include <iostream>
#include <string>
#include <vector>
using namespace std;

/*"前缀"和"后缀"的最长的共有元素的长度*/
int public_str(string str)
{
	if(str.size()==1||str.size()==0)
		return 0;
	int i=1,len=str.size();
	for(i=1;i<len;i++)
	{
		int flag=0;
		for(int j=0;j<i;j++)
		{
			if(str[j]!=str[len-i+j])
			{
				flag=1;
				break;
			}
		}
		if(flag==0)
			return i;
	}
	return 0;
}

/*计算部分匹配值*/
vector<int> match_value(string str)
{
	vector<int> temp;
	int len=str.size();
	for(int i=0;i<len;i++)
	{
		string str1=str.substr(0,i+1);
		temp.push_back(public_str(str1));
	}
	return temp;
}

/*KMP算法的主要部分*/
int strStr(string haystack, string needle) {
	if(haystack.size()==0||needle.size()==0)
		return -1;
	if(needle.size()>haystack.size())
		return -1;
	vector<int> matchvalue=match_value(needle);
	int len_haystack=haystack.size();
	int len_needle=needle.size();
	int i=0;
	while(i<=(len_haystack-len_needle))
	{
		int flag=0;
		int noMatch=0;
		int j=0;
		for(j=0;j<len_needle;j++)
		{
			if(needle[j]!=haystack[i+j])
			{
				flag=1;
				noMatch=j;
				break;
			}
		}
		if(flag==0)
		{
			return i;
		}
		else if(flag==1)
		{
			if(j==0)
				i=i+1;
			else
				i=i+j-matchvalue[j-1];
		}
	}
	return -1;
}
int main()
{
	string str="ABGTYDFSDFRTGAAASEDF";
	string str1="TYD";
	cout<<strStr(str,str1)<<endl;

}

  

时间: 2024-10-13 11:28:20

leetcode_28题——Implement strStr()(采用KMP算法,还没AC,但自己这边测试无误)的相关文章

70. Implement strStr() 与 KMP算法

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. MY: Question. 思路: 逐步查找.当出现不同时,如何回溯是关键. Solution A: class Solution { public: char *strStr(char *haystack

leetcode——Implement strStr() 实现字符串匹配函数(AC)

Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 这个题考查的是KMP算法.先求特征向量,然后再进行匹配,确实能够大大提高效率.code例如以下: class Solution { public: char *strStr(char *haystack, char *needle) { if(

leetcode第27题--Implement strStr()

Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 就是判断haystack中是否有needle,如果包含的话,返回第一次包含的地址.如果没有则返回NULL. 这题官网打出来的是easy,但是要做好绝不简单.我能想到的就是O(m*n)的复杂度了.最经典的是用KMP算法. class Soluti

Implement strStr()&amp;BF&amp;KMP

Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 思路:时间复杂度O(m*n),也就是BF(Brute Force)算法: code: class Solution { public: char *strStr(char *haystack, char *needle) { if(!*need

LeetCode刷题--基础知识篇--KMP算法

KMP算法 关于字符串匹配的算法,最知名的莫过于KMP算法了,尽管我们日常搬砖几乎不可能去亲手实现一个KMP算法,但作为一种算法学习的锻炼也是很好的,所以记录一下. KMP算法是根据三位作者(D.E.Knuth, J.H.Morris和V.R.Pratt)的名字来命名的,算法的全称是Knuth Morris Pratt算法,简称为KMP算法. 关于字符串匹配,我们假设要在字符串A中查找字符串B,那么我们可以把字符串A叫做主串,把B叫做模式串.所以字符串匹配其实就是要在主串中找到与模式串相同的子串

7-3 Path to Infinity(还没ac)

留坑 #include<bits/stdc++.h> using namespace std; const int maxn=14; const int mod=99991; typedef long long ll; string s,t; int tol1=0,tol2=0,tol3=0; int a[maxn]; string tmp,path; unordered_set<string> st; typedef long long ll; int N,M; int tle=

Linux GCC下strstr的实现以及一个简单的Kmp算法的接口

今天做了一道题,要用判断一个字符串是否是另一个字符串的子串,于是查了一下strstr的实现. 代码如下: 1 char *strstr(const char*s1,const char*s2) 2 { 3 const char*p=s1; 4 const size_t len=strlen(s2); 5 for(;(p=strchr(p,*s2))!=0;p++) 6 { 7 if(strncmp(p,s2,len)==0) 8 return (char*)p; 9 } 10 return(0)

Leet Code OJ 28. Implement strStr() [Difficulty: Easy]

题目: 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. 分析: 在文本中查找某个模式出现的位置的算法,称为字符串匹配算法.常用的方法有

从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法,”看毛片“算法)

转载请加上:http://www.cnblogs.com/courtier/p/4273193.html 在开始讲这个文章前的唠叨话: 1:首先,在阅读此篇文章之前,你至少要了解过,什么是有限状态机,什么是KMP算法,因为,本文是从KMP的源头,有限状态 机来讲起的,因为,KMP就是DFA(Deterministic Finite Automaton)上简化的. 2:很多KMP的文章(有限自动机去解释的很少),写得在我看来不够好,你如果,没有良好的数学基础就很难去理解他们(比如下图), 因为,你