该算法的时间复杂度为O(m+n),在极端情况下时间复杂度为O(m*n)
/** * @brief 该函数实现了字符串的模式匹配算法,时间复杂度为O(m+n),在极端情况下时间复杂度为O(m*n) * @param[in] pSrc 源数据指针 * @param[in] pDst 目标字符串指针 * @param[in] nPose 主串起始匹配位置 * @return 返回模式串在主串中位置 * - -1 表示操作失败 * @author wlq_729@163.com * http://blog.csdn.net/rabbit729 * @version 1.0 * @date 2009-03-03 */ #include <iostream> using namespace std; int Index(const char* pSrc, const char* pDst, const int nPose) { if (pSrc == NULL || pDst == NULL) { return -1; } if (nPose < 0 || nPose >= strlen(pSrc)) { return -1; } int i = nPose; int j = 0; while ((i < strlen(pSrc)) && (j < strlen(pDst))) { if (pSrc[i] == pDst[j]) { i++; j++; } else { i = i - j + 1; j = 0; } } if (j > strlen(pDst) - 1) { return i - strlen(pDst); } else { return -1; } } void main(void) { char* test1 = "abcdefgh"; char* test2 = "de"; int i = Index(test1, test2, 0); cout<<i<<endl; }
posted on 2009-03-03 10:19 张云临 阅读(170) 评论(0) 编辑 收藏 举报