kmp字符出模式匹配java实现
来源:互联网 发布:巴基实力 知乎 编辑:程序博客网 时间:2024/05/04 18:10
public class KMP {
static char[] string = {'a','b','c','d','a','b','a','d','e','t','g','p','b','z','h','m','q'};
static char[] subString = {'b','c','z','a'};
public static void main(String[] args) {
System.out.println("indexof:"+match(string,subString));
}
static int[] prePro(char[] subString){
int length = subString.length;
int [] result = new int[length];
result[0] = 0;
result[1] = 0;
int i=2;
while(i<length){
if(subString[result[i]]==subString[i-1]){
result[i] = result[i-1]+1;
}else{
for(int j=0;j<i-1;j++){
char[] temp1 = new char[j+1];
char[] temp2 = new char[j+1];
for(int k=0;k<=j;k++){
temp1[k] = subString[k];
temp2[k] = subString[i-j+k-1];
}
System.out.print("temp1:");
for(int k=0;k<temp1.length;k++){
System.out.print(temp1[k]);
}
System.out.println();
System.out.print("temp2:");
for(int k=0;k<temp1.length;k++){
System.out.print(temp2[k]);
}
System.out.println();
int n = equals(temp1,temp2);
if(result[i]<n){
result[i] = n;
}
}
}
i++;
}
System.out.print("next:");
for(int n:result){
System.out.print(n);
}
return result;
}
static int equals(char[] string1,char[] string2){
if(string1.length!=string2.length){
return 0;
}
int i = 0;
for(i=0;i<string1.length;i++){
if(string1[i]!=string2[i]){
break;
}
}
if(i<string1.length){
return 0;
}else{
return i;
}
}
public static int match(char[] string,char[] subString){
int result = -1;
if(string.length<subString.length){
return result;
}
int[] next = prePro(subString);
int i=0,j=0;
while(j<=string.length-subString.length&&i<subString.length){
if(string[j]==subString[i]){
j++;
i++;
}else{
if(i!=0){
if(subString[i]==subString[0]){
j++;
}
i = next[i];
}else{
j++;
}
}
}
if(i==subString.length){
result = j-subString.length;
}
System.out.println();
return result;
}
}
static char[] string = {'a','b','c','d','a','b','a','d','e','t','g','p','b','z','h','m','q'};
static char[] subString = {'b','c','z','a'};
public static void main(String[] args) {
System.out.println("indexof:"+match(string,subString));
}
static int[] prePro(char[] subString){
int length = subString.length;
int [] result = new int[length];
result[0] = 0;
result[1] = 0;
int i=2;
while(i<length){
if(subString[result[i]]==subString[i-1]){
result[i] = result[i-1]+1;
}else{
for(int j=0;j<i-1;j++){
char[] temp1 = new char[j+1];
char[] temp2 = new char[j+1];
for(int k=0;k<=j;k++){
temp1[k] = subString[k];
temp2[k] = subString[i-j+k-1];
}
System.out.print("temp1:");
for(int k=0;k<temp1.length;k++){
System.out.print(temp1[k]);
}
System.out.println();
System.out.print("temp2:");
for(int k=0;k<temp1.length;k++){
System.out.print(temp2[k]);
}
System.out.println();
int n = equals(temp1,temp2);
if(result[i]<n){
result[i] = n;
}
}
}
i++;
}
System.out.print("next:");
for(int n:result){
System.out.print(n);
}
return result;
}
static int equals(char[] string1,char[] string2){
if(string1.length!=string2.length){
return 0;
}
int i = 0;
for(i=0;i<string1.length;i++){
if(string1[i]!=string2[i]){
break;
}
}
if(i<string1.length){
return 0;
}else{
return i;
}
}
public static int match(char[] string,char[] subString){
int result = -1;
if(string.length<subString.length){
return result;
}
int[] next = prePro(subString);
int i=0,j=0;
while(j<=string.length-subString.length&&i<subString.length){
if(string[j]==subString[i]){
j++;
i++;
}else{
if(i!=0){
if(subString[i]==subString[0]){
j++;
}
i = next[i];
}else{
j++;
}
}
}
if(i==subString.length){
result = j-subString.length;
}
System.out.println();
return result;
}
}
0 0
- kmp字符出模式匹配java实现
- KMP模式匹配 Java实现
- 字符匹配KMP算法 java实现
- KMP字符串模式匹配算法Java实现
- KMP模式匹配算法实现
- 模式匹配KMP算法实现
- KMP模式匹配算法实现
- java实现字符串的一般和KMP模式匹配算法
- java实现Brute-Force和KMP模式匹配
- Kmp字符匹配算法优化C++实现
- KMP字符串模式匹配的C实现
- KMP模式匹配算法分析与实现
- 模式匹配 -- KMP 算法原理与实现
- 算法:KMP算法实现的模式匹配
- KMP模式匹配算法 C++实现
- KMP字符串模式匹配算法实现(php)
- KMP 单模式匹配, 实现 strStr()
- 模式匹配 KMP C语言算法实现
- Hadoop 解除 "Name node is in safe mode"
- C单链表基本功能
- Placement new的用法及用途
- Redux解析
- CentOS yum 源的配置与使用
- kmp字符出模式匹配java实现
- Error querying database
- 解决Hive installation issues: Hive metastore database is not initialized
- JavaScript Break
- Windows/Unix/Mac系统风格的换行符
- Zookeeper3.4.6的安装
- IOT和HEAP表区别
- 用于Lucene的各中文分词比较
- Objective-C method ‘application:didFinishLaunchingWithOptions: