KMP算法和实现
2010-04-29 14:56
387 查看
题目:写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数
先来一个非KMP算法
关键在于 每次遇到不同 2个串都要回溯到开头
KMP算法精髓:
基准串不回溯 只回溯子串
回溯准则:
1. 尽量大
2. 镜面对称
先来一个非KMP算法
int findSubString(char* pBase, char* pSource) { if(pBase == NULL || pSource == NULL) return 0; char* pSourceHead = pSource; char* pBaseHead = pBase; int nMatchCount = 0; while(*pBase != '/0' && *pSource != '/0') { if(*pBase == *pSource) { pBase++; pSource++; nMatchCount++; } else { pSource = pSourceHead; // 回溯到开头 pBase = pBase - (nMatchCount-1)*sizeof(char); // 回溯到第一个比对位置后一个位置 nMatchCount = 0; } } if(*pSource == '/0') return pBase - pBaseHead - nMatchCount+1; else return 0; }
关键在于 每次遇到不同 2个串都要回溯到开头
KMP算法精髓:
基准串不回溯 只回溯子串
回溯准则:
1. 尽量大
2. 镜面对称
相关文章推荐
- KMP算法实现
- KMP算法代码实现和优化(不太能理解具体的过程和该算法思想)
- KMP算法(Knuth-Morris-Pratt Algorithm)的C语言实现加注释
- KMP算法C++实现
- KMP算法--c语言实现
- 字符串-KMP算法实现(数据结构基础 第4周)
- 字符串匹配之KMP算法思路、原理与Java实现
- KMP算法实现
- kmp算法实现
- KMP算法实现-java版
- KMP算法详解C++实现
- KMP算法实现
- KMP算法实现
- KMP算法实现
- kmp算法的实现
- 解析网页(KMP算法实现部分)
- 不能更通俗了!KMP算法实现解析
- Java实现KMP算法
- 模式匹配KMP算法实现
- KMP算法的C#实现方法