/**
* kmp算法变种实现模糊的模式匹配方法
* 如:大贼王在这男人处,匹配,我是要成为海贼王的男人;
* 可以匹配出贼王,返回 “贼王”;
* 或返回模式串“大贼王在这男人处”关于 贼王、男人 的位置,与匹配串 我是要成为海贼王的男人 关于 贼王、男人 的位置
* 时间复杂度:
* 空间复杂度:
* @author Administrator
*/
public class KmpFuzzyUtils {
private static List<PatternLocation> getFuzzyMatching(String input, String target){
try{
int m = input.length();
int n = target.length();
if(m <= 0 || n <= 0){
return Collections.emptyList();
}
List<PatternLocation> list = new ArrayList<>();
Integer count = 0;
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j){
if(input.charAt(i) == target.charAt(j)){
count = i;
//都需要注意边界效应
grandson:
for(int x = j ; x < n && count < m; ++x){
System.out.println(input.charAt(count) + " xxxxx " + target.charAt(x));
if(input.charAt(count) != target.charAt(x)){
PatternLocation patternLocation = new PatternLocation();
patternLocation.setStart(j);
patternLocation.setEnd(x);
patternLocation.setValue(target.substring(j,x));
list.add(patternLocation);
break grandson;
}else {
if(count+1 >= m || x+1 >= n){
x++;
PatternLocation patternLocation = new PatternLocation();
patternLocation.setStart(j);
patternLocation.setEnd(x);
patternLocation.setValue(target.substring(j,x));
list.add(patternLocation);
break grandson;
}
}
count++;
}
}
}
}
return list;
}catch (Exception e){
e.printStackTrace();
}
return Collections.emptyList();
}
public static void main(String[] args) {
List<PatternLocation> matchs = getFuzzyMatching("大贼王在这男人处", "我是要成为海贼王的男人还好大");
System.out.println(matchs);
}
}
模糊模式匹配
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配...
- 作者:Olivier Halligon,原文链接,原文日期:2015-04-24译者:walkingway;校对:...
- 数据结构和算法书一般会介绍KMP算法,其实KMP算法的性能并不好。查看Java源码和PHP源码后,发现他们使用了如...
- 概述:本文主要在理论层面上分析KMP的基本实现原理以及《部分匹配表》推导过程;不涉及代码实现;如果您对KMP的实现...
- 串的匹配算法:对主串的每一个字符作为开头,作与要匹配的字符串的长度的小循环,直到匹配成功或全部遍历完为止。 KMP...