KMP算法1--普通的模式匹配算法

来源:互联网 发布:sql卸载 编辑:程序博客网 时间:2024/06/04 23:17

一  简单的模式匹配算法

  简单的字符串匹配算法用一个循环来找出所有有效位移,
   该循环对n-m+1个可能的每一个s值检查条件P[1....m]=T[s+1....s+m]。

NAIVE-STRING-MATCHER(T, P)
1 n ← length[T]
2 m ← length[P]
3 for s ← 0 to n - m
4     do if P[1 ‥ m] = T[s + 1 ‥ s + m]          
      //对n-m+1个可能的位移s中的每一个值,比较相应的字符的循环必须执行m次。
5           then print "Pattern occurs with shift" s

最好情况下,时间复杂度O(n+m)

在最坏情况下,此简单模式匹配算法的运行时间为O((n-m+1)m)

//C languageint strIndex(char* s, char* t, int pos) { int i = pos; int j = 1; while(i<s[0] && j<t[0]){ if(s[i]==t[j]){   i++;   j++; } else{ i=i-j+2; j=1; }//while if(j>t[0])  return(i-t[0]); else return 0; } }

C++实现

#include<iostream> #include<string> using namespace std; int match(const string& target,const string& pattern) {     int target_length = target.size();     int pattern_length = pattern.size();     int target_index = 0;     int pattern_index = 0;     while(target_index < target_length && pattern_index < pattern_length)     {         if(target[target_index]==pattern[pattern_index])         {             ++target_index;             ++pattern_index;         }         else         {             target_index -= (pattern_index-1);              pattern_index = 0;         }     }     if(pattern_index == pattern_length)     {         return target_index - pattern_length;     }     else     {         return -1;     } } int main() {     cout<<match("banananobano","nano")<<endl;     return 0; }  //运行结果为4。