高速字符串匹配算法
问题描述:
答
就我所知,双向字符串匹配是字符串匹配的最佳通用算法。它具有线性最坏情况的复杂度,使用恒定的空间,并且不会超出必要的数量。背后的理论非常好。
如果你知道你的用户不是混蛋,那么针对你的架构优化的天真的字符串匹配将赢得短的“针”,而Boyer-Moore变种将开始真正为长“针”做次线性事情。然而,天真的字符串匹配有一个二次最坏的情况,Boyer-Moore可以检查输入中的所有字符。处理不匹配所需的额外表格实际上对双向字符串匹配带来了令人惊讶的严重损失。
答
import java.util.Scanner;
public class StringMatch {
static int temp,i=0,j=0; static boolean flag=true,matcher=false;
static String str=null,mstr=null;static char astr[],amstr[];
static void getter(){
Scanner sc = new Scanner(System.in);
str = sc.nextLine();
//String str="today is Monday";
astr=str.toCharArray();
mstr = sc.nextLine();
//String mstr="is";
amstr=mstr.toCharArray();
}
static void stringMatch(){
while(i<astr.length){
if(astr[i]==amstr[j]){
while((j!=amstr.length)&&flag){temp=i;
if(astr[i]!=amstr[j]) {flag=false;matcher=false;}
else{matcher=true;}
i++;j++;
//System.out.println(i+"\t"+j);
}if(matcher==true)break;i=temp;}i++;j=0;flag=true;
}
if(matcher==true) {System.out.println("true");}
else {System.out.println("false");}
}
public static void main(String[] args) {
StringMatch.getter();
StringMatch.stringMatch();
}
}
+1
欢迎。你可以通过解释关于这个算法的一些东西来使这个更好的答案,也许它是如何与问题中提到的相比? – 2016-04-13 19:40:00
也许看看这里:http://www-igm.univ-mlv.fr/~lecroq/string/index.html – Nabb 2012-07-26 07:09:24
优秀的收集!非常感谢Nabb! – sashank 2012-07-26 08:59:00