首页 > 代码库 > 字符串匹配算法
字符串匹配算法
字符串匹配算法有很多种,最为常用的有KMP算法、普通算法。
1、普通算法:此算法是效率最低的算法,时间复杂度为O(NM)。
程序如下:
bool str_match(const char * str1, const char * str2)//O(P*T) { assert(str1 != NULL && str2 != NULL); int k = 0; for (unsigned int i = 0; i < strlen(str1); i ++) { k = i; for (unsigned int j = 0; j < strlen(str2); j ++) { if (*(str1 + k++) == *(str2 + j)) { if (j == strlen(str2)-1) return true; } else break; } } return false; }
2、KMP算法,KMP算法可以说是在普通算法上的改进的算法,在普通算法中,在字符串P中每一次只移动一个字符,而在KMP算法中,根据后缀表达式相同的方法,可以跳过几个字符,在算法执行开始需要找出每次移动的字符数。
程序如下:
////---------------------------------------------------KMP-------------// void findNext(const char * strP, int * next) { assert(strP != NULL && next != NULL); int lenP = strlen(strP); *next = -1; int i = 0; int j = -1; while (i < lenP) { while (j == -1 || j < lenP && *(strP+i) == *(strP + j) ) { j++; i++; if(*(strP+i) != *(strP + j)) next[i] = j; else next[i] = next[j]; } j = next[j]; } } int KMP(const char * strP, const char *strT) { assert(strP != NULL && strT != NULL); int lenP = strlen(strP); int * next = new int[lenP]; findNext(strP,next); int i = 0; int j = 0; int lenT = strlen(strT); while (i <= strT-strP) { while (j == -1 || j < lenP && *(strP+j) == *(strT + i)) { i++; j++; } if (j == lenP) { return i - lenP; } j = *(next+j); } delete [] next; return -1; } //--------------------------------------end of KMP-------------------------------------//
字符串匹配算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。