可惜我就是讲不明白 , 直接上书
,见图片附件 ,手机 500M 像素 蛮清楚的
import java.util.Arrays;
/**
* User: yiminghe
* Date: 2009-2-19
* Time: 16:37:57
*/
public class Kmp {
/**
* index[i] 越小 ,滑动越多,匹配速度越快
*
* @param pattern
* @return
*/
private static int[] getFail(String pattern) {
int[] index = new int[pattern.length()];
index[0] = -1;
int lengthP = pattern.length();
for (int i = 1; i < lengthP; i++) {
int cf = index[i - 1];
while (pattern.charAt(cf + 1) != pattern.charAt(i) && cf >= 0) cf = index[cf];
if (pattern.charAt(cf + 1) == pattern.charAt(i)) index[i] = cf + 1;
else index[i] = -1;
}
return index;
}
public static int kmpFind(String target, String pattern) {
int posP = 0;
int posT = 0;
int lenP = pattern.length();
int lenT = target.length();
int[] index = getFail(pattern);
while (true) {
while (posT < lenT && posP < lenP && target.charAt(posT) == pattern.charAt(posP)) {
++posT;
++posP;
}
if (posP == lenP) {
return posT - lenP;
}
if (posT == lenT) return -1;
if (posP == 0) ++posT;
else
posP = index[posP - 1] + 1;
}
}
public static void main(String[] args) {
//字符串从左开始1
System.out.println(kmpFind("acabaabaabcacaabc", "abaabcac"));
}
}
- 大小: 816.4 KB
- 大小: 2 MB
- 大小: 2.1 MB
分享到:
相关推荐
传统的字符串匹配算法如KMP、Shift-And、BM和BDM等虽然理论上有较高的效率,但在实际应用中并不总是表现出最优性能。例如,在普通文本文件中,Boyer-Moore(BF)算法可能比KMP算法运行得更快,尽管KMP的时间复杂度更...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
- **模式匹配**:是指在一个字符串(主串)中查找一个特定的子串(模式串)的过程,目的是确定模式串是否存在于主串中以及其出现的位置。 2. **算法分类** - **精确匹配算法**:如KMP算法、Boyer-Moore算法、...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
KMP(Knuth-Morris-Pratt)算法是一种在文本串中高效地查找模式串的字符串匹配算法。它由D.E. Knuth、V. Morris和J.H. Pratt于1970年提出,主要用于解决计算机科学中的字符串处理问题。在C语言中实现KMP算法,可以...
总的来说,理解和掌握字符串查找的原理及算法是编程能力的重要组成部分,它能帮助我们有效地处理和分析文本数据,提升软件的性能和用户体验。在实际项目中,我们应当根据具体场景灵活运用这些知识,以实现最优的解决...
4. **KMP算法**:是一种高效的字符串匹配算法,能够在O(n)时间内找出在一个文本串中是否存在指定的模式串。KMP算法避免了不必要的回溯,提高了查找效率。 5. **Huffman编码**:是数据压缩的一种方法,通过构建最优...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
7. **字符串处理问题**:如模式匹配、字符串反转等。 8. **数学问题**:涉及数学运算和逻辑的算法问题。 解决算法题通常需要对问题进行分析,选择合适的算法或数据结构,并编写出高效、清晰的代码。在面试、编程...
尤其在长字符串查找中表现优秀。 6. **KMP算法**:同样是一种滑动窗口的算法,通过预处理得到模式串的next数组,避免了重复匹配已匹配过的字符,提高了查找速度。 在实际应用中,选择哪种查找算法取决于具体场景。...
在IT领域,排序和字符串匹配是两个非常基础且重要的概念,广泛应用于数据处理、文本分析、算法设计等多个方面...无论是排序算法的选择还是字符串匹配策略的制定,都需要结合具体问题和性能需求,以达到最优的解决方案。
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...
常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法等。 这些是计算机科学中常见的算法类型,每种算法都有不同的应用场景和解决问题的方法。在实际编程中,选择合适的算法对于提高程序效率和性能至关重要...