Java实现字符串组合的模糊匹配

08月05日 收藏 0 评论 5 java开发

Java实现字符串组合的模糊匹配

转载声明:文章来源 https://blog.csdn.net/yzhuahq/article/details/88376321

背景

接到这么一个需求:根据用户输入内容(以下简称S)对一系列的字符串组合(每个字符串组合以下简称Z)进行模糊匹配,返回匹配的字符串组合(以下简称R)。

举个例子,有如下一系列的Z:(ab),(ab,cd),(ab,cd,ef)
当S为a时,R为(ab),(ab,cd),(ab,cd,ef)
当S为a,c时,R为(ab,cd),(ab,cd,ef)

实现方式

如果要做
精确匹配,实际上就是判断S是不是Z的子集,可以直接考虑调用List.containsAll实现。
模糊匹配,实际上是对S中的每个字符串s,判断Z中是否有一个字符串z包含它,即z.contains(s)。
核心代码如下:

import java.util.*;

public class FuzzyContainsTest {
public static void main(String []args) {
List list = Arrays.asList("ab,cd".split(","));
List query = Arrays.asList("a,c".split(","));
System.out.println(fuzzyContainsAll(list, query));
}

// 判断S是不是Z的子集
public static boolean fuzzyContainsAll(List list, List query) {
boolean flag = true;
for(String str : query) {
flag = flag && fuzzyContains(list, str);
}
return flag;
}

// 对S中的每个字符串s,判断Z中是否有一个字符串z包含它
public static boolean fuzzyContains(List list, String s) {
boolean flag = false;
for(String z : list) {
flag = flag || z.contains(s);
}
return flag;
}
}

后续优化

这段代码的时间复杂度是O(n^3),应该有优化的空间,或者有更高效的实现方式,后续想到了再补充。

C 5条回复 评论
Ricky

哇,好棒啊,崇拜的小眼神

发表于 2021-09-13 13:55:00
0 0
逍洛

学习学习学习

发表于 2021-09-12 21:55:00
0 0
书为

好文,喜欢看,比书上的好

发表于 2021-09-10 17:50:00
0 0
灵魂火符

安利一款我用过最好用的接口测试工具——apipost ,页面简洁,操作简单功能也多。

发表于 2021-09-10 12:00:00
0 0
紫侠仙子

跟着大佬输出,感觉能量满满

发表于 2021-09-09 20:20:00
0 0