转载声明:文章来源 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),应该有优化的空间,或者有更高效的实现方式,后续想到了再补充。
哇,好棒啊,崇拜的小眼神
学习学习学习
好文,喜欢看,比书上的好
安利一款我用过最好用的接口测试工具——apipost ,页面简洁,操作简单功能也多。
跟着大佬输出,感觉能量满满