問題:查詢text中是否含有pattern字串,返回pattern在text中的位置。
#include #include using namespace std;
// init the prefix array. when comparing, if text[i] != pattern[j],
// then pattern[prefix[j]] should be next check point of pattern against text[i].
//// say y = prefix[j], y stands for the biggest length of the word pattern[0..(y-1)]
// that makes (pattern[0..(y-1)] == pattern[(j-y+1)..j]).
// in another word, y stand for the next comparation point of pattern.
// (y==0) means no such word, the next comparation should shart from pattern[0].
// note: it's possible that 00) && (pattern[i] != pattern[k]))
if (pattern[i] == pattern[k])
else
}return;
}int strstr(const char* text, const char* pattern)
int lentext = strlen(text);
int lenpattern = strlen(pattern);
if (lentext < lenpattern)
int *prefix = new int[lenpattern + 1];
initprefix(pattern, prefix); //the prefix array of pattern
int index = -1; // the index to be returned.
int i = 0; // the compare index in text.
int j = 0; // the compare index in pattern
while ((text[i] != '/0') && ((lentext - i) >= (lenpattern - j)))
// compare next char in pattern and text.
j++;
i++;
}else
else }}
delete prefix;
prefix=0;
return index;
}
KMP 演算法 字串查詢演算法
knuth morris pratt algorithm 克努斯 莫里斯 普拉特 演算法 克努斯 莫里斯 普拉特演算法 部分匹配表 字首 指除了最後乙個字元以外,乙個字串的全部頭部組合 字尾 指除了第乙個字元以外,乙個字串的全部尾部組合 部分匹配值 就是 字首 和 字尾 的最長的共有元素的長度。以 ...
字串查詢演算法kmp
字串查詢最簡單的方法就是乙個乙個地 滑動 查詢。這樣查詢演算法複雜度可定很高,假設pattern的長度為m,文字txt的長度為n,那麼演算法複雜度為o m n m 1 kmp模式搜尋演算法 kmp knuth morris pratt 我只認識knuth,大名鼎鼎的高納德老頭子嘛。kmp演算法的基本...
字串查詢演算法kmp
給定乙個文字串s,和乙個匹配串p,要求查詢p第一次在s中出現的位置。常見的方法如暴力搜素,逐個匹配s i p j 若匹配,下標後移。不匹配,i回溯到這次匹配前的下一位置,j置為0,重新匹配。最壞情況,時間複雜度o n m int violencesearch char s,char p else i...