说我有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/