java实现kmp算法
2011-04-29 22:00
513 查看
//kmp.java
/**
*@author feixiang KMP算法
*待查的字符和next数组都是从0号单元开始的
*next数组的第一个是-1 即为如果要比较的下一个是带比较串的第-1个,就要移动原串了
*多走一步得-1才能知道前面没有了
*/
package first;
public class kmp{
public static void main(String[] args)
{
String a = "aaabcabcdeadfskdljfa;lskjdf;kljsdkjfeilskjf";
String b = "abcabcde";
int c = kmp_find(a,b,0);
System.out.println(c);
}
static int[] GetNext(String fidStr)
{
int len = fidStr.length();
int next[] = new int[len];
int j = -1, i = 0;
next[0] = -1;
while(i < len-1)//这里这个减1是必要的,因为i关系到了要算出next的前一个
{
if(-1 == j || fidStr.charAt(j) == fidStr.charAt(i))
{
++i; ++j;
if(fidStr.charAt(j) == fidStr.charAt(i))
next[i] = next[j];
else
next[i] = j;
}
else
{
j = next[j];
}
}
return next;
}
static int kmp_find(String SurStr, String FidStr, int pos)
{
int next[] = GetNext(FidStr);
int j = 0;
int i = pos;
while(j < FidStr.length() && i < SurStr.length()-FidStr.length()+1)
{
if(-1 == j || FidStr.charAt(j) == SurStr.charAt(i))
{
j++; i++;
}
else
{
j = next[j];
}
}
if(j == FidStr.length())
{
return i-FidStr.length();
}
else
{
return -1;
}
}
}
/**
*@author feixiang KMP算法
*待查的字符和next数组都是从0号单元开始的
*next数组的第一个是-1 即为如果要比较的下一个是带比较串的第-1个,就要移动原串了
*多走一步得-1才能知道前面没有了
*/
package first;
public class kmp{
public static void main(String[] args)
{
String a = "aaabcabcdeadfskdljfa;lskjdf;kljsdkjfeilskjf";
String b = "abcabcde";
int c = kmp_find(a,b,0);
System.out.println(c);
}
static int[] GetNext(String fidStr)
{
int len = fidStr.length();
int next[] = new int[len];
int j = -1, i = 0;
next[0] = -1;
while(i < len-1)//这里这个减1是必要的,因为i关系到了要算出next的前一个
{
if(-1 == j || fidStr.charAt(j) == fidStr.charAt(i))
{
++i; ++j;
if(fidStr.charAt(j) == fidStr.charAt(i))
next[i] = next[j];
else
next[i] = j;
}
else
{
j = next[j];
}
}
return next;
}
static int kmp_find(String SurStr, String FidStr, int pos)
{
int next[] = GetNext(FidStr);
int j = 0;
int i = pos;
while(j < FidStr.length() && i < SurStr.length()-FidStr.length()+1)
{
if(-1 == j || FidStr.charAt(j) == SurStr.charAt(i))
{
j++; i++;
}
else
{
j = next[j];
}
}
if(j == FidStr.length())
{
return i-FidStr.length();
}
else
{
return -1;
}
}
}
相关文章推荐
- KMP算法的java实现
- KMP算法及Java实现
- JAVA实现KMP算法理论和示例代码
- 【算法总结】KMP算法及java实现
- KMP算法的实现(Java语言描述)
- 凭借对KMP算法的了解,用java实现了一下,结果和java自带的字符串indexOf比,性能差了十倍。。。
- 字符串匹配之KMP算法思路、原理与Java实现
- KMP算法的java实现
- KMP算法的Java实现
- KMP算法java实现
- KMP算法的实现(Java语言描述)
- KMP算法Java实现以及总结
- KMP算法JAVA实现
- KMP算法的实现(Java语言描述)
- KMP算法的java实现
- java实现字符串kmp算法
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- KMP算法的实现(Java语言描述)
- 经典KMP算法C++与Java实现代码
- KMP算法java实现之策略模式