【发布时间】:2019-06-24 11:40:24
【问题描述】:
如果两个英文单词仅包含相同的字母,则它们是相似的。例如,food 和 good 不相似,但 dog 和 good 相似。 (如果A与B相似,则A中的所有字母都包含在B中,B中的所有字母都包含在A中。)
给定一个单词 W 和一个单词列表 L,找出 L 中与 W 相似的所有单词。将单词计数打印到标准输出。
示例:
输入(标准输入):
love
velo low vole lovee volvell lowly lower lover levo loved love lovee lowe lowes lovey lowan lowa evolve loves volvelle lowed love
输出(标准输出):
14
说明:
L中与love类似的词是
velo vole lovee volvell lover levo loved love lovee lovey evolve loves volvelle love
最多可达14。
所以我目前的解决方案如下:
public static void main(String[] args) {
String[] arr = new String[]{"velo", "low", "vole", "lovee", "volvell", "lowly", "lower", "lover", "levo", "loved", "love",
"lovee", "lowe", "lowes", "lovey", "lowan", "lowa", "evolve", "loves", "volvelle", "lowed", "love"};
String s = "love";
int result = 0;
Pattern p = Pattern.compile(buildPattern(s));
for (String val : arr) {
if (p.matcher(val).find()) result++;
}
System.out.println(result);
}
private static String buildPattern(String s) {
String pattern = "^";
for (int i = 0; i < s.length(); i++) {
pattern += "(?=.*" + s.charAt(i) + ")";
}
return pattern;
}
我想知道我的简单代码是否有任何改进。
Aho-Corasick 是适用的解决方案吗?
【问题讨论】:
-
查看 codereview.stackexchange.com
-
您可以轻松地手动验证只有 10 个单词匹配,而不是 14 个。
-
@ErwinBolwidt 哇,我真的想看看,这对我来说并不明显,我每次都数了 14。
-
"velo" 1 , "low" , "vole" 2, "lovee" 3 , "volvell" 4 , "lowly", "lower", "lover", "levo" 5 , "爱”,“爱” 6,“爱” 7,“洛威”,“洛伊”,“洛维”,“洛文”,“洛瓦”,“进化” 8,“爱”,“volvelle” 9,“洛德” , “爱” 10
-
"如果A与B相似,则A中的所有个字母都包含在B中,B中的所有个字母都包含在A中。 ”。由于“r”、“d”、“y”和“s”不在“love”中,因此这些词与“love”不相似。