说我有String x= "algorithm"和String y= "mgth"

字符串x包含字符串y中的所有字母,我可以将字符串y拆分成一个字母列表,然后遍历此列表以查看字符串x是否包含字母y[index]
但我想知道是否有更有效的方法

编辑:

在kotlin中,有一个简单的相交函数,例如:

val x="algorithm".toList()
val y="mgth".toList()
val interesct=x.intersect(y) //returns a Set of matching chars

if (y.size == interesct.size){
    println("match")
}

最佳答案

正则表达式为营救:

    String pattern = "mgth".chars()
            .mapToObj(ch -> "(?=.*" + (char) ch + ")")
            .collect(Collectors.joining());

    // ".*(?=.*m)(?=.*g)(?=.*t)(?=.*h).*"
    boolean matches = Pattern.compile(".*"+pattern+".*")
            .matcher("algorithm")
            .matches();

    System.out.println(matches);


仅当"algorithm"包含目标字符串生成的模式中的所有字符时,此命令才匹配。

编辑

另外,您可以对两个字符串进行排序,并且仅在[min("mgth"), max("mgth")]个char值的间隔内执行比较。

关于java - 文本相似度搜索算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57030232/

10-09 04:57