我有一个输入的单词列表。您检查第一个单词的后缀到下一个单词的前缀。
例如。
平静 下一个 探戈 额外的
{serene,next}= 2common letters {serene,tango}=0 {serene,extra}= 1
{next,serene}= 0 {next,tango}= 1 {next,extra}= 3
{tango,serene}=0 {tango,next}= 0 {tango,extra}= 0
{extra,serene}=0 {extra,next}=0 {extra,tango}=0
您还可以切换单词的顺序,即(next,serene),如果重叠字母得分更好,这种方式
所以你检查每个单词的重叠分数,最后返回具有最大分数的单词列表
根据输入列表得分为 1 Restful ,下一个,探戈,额外 = 1
最高分 = 5,返回的输出列表如下:
丝氨酸,下一个,额外的,探戈
serene,next= 2common letters serene,tango=0 serene,extra= 1
next,serene= 0 next,tango= 1 next,extra= 3
tango,serene=0 tango,next= 0 tango,extra= 0
extra,serene=0 extra,next=0 extra,tango=0
就复杂性而言,计算重叠分数和返回最大分数列表的最佳方法是什么?
我只能计算连续单词的重叠分数,但这并不能给出最高分数。
最佳答案
您可以将所有字母添加到一个列表中,然后像这样执行 retainAll:
String one="next", two="extra";
List<Character> oneList=new ArrayList<Character>();
for(Character c : one.toCharArray()) {
oneList.add(c);
}
List<Character> twoList=new ArrayList<Character>();
for(Character c : two.toCharArray()) {
twoList.add(c);
}
List<Character> finalList = new ArrayList<Character>(oneList);
finalList.retainAll(twoList);
System.out.print("There are "+finalList.size()+ " letters in common and they are : ");
for(Character c: finalList){
System.out.print(c+" ");
}
不幸的是,除了使用 Google Guava library 之外,我不知道将原始数据类型转换为列表的更好方法。或其他 3 方 API。如果您想优化代码,请查看它们。
关于java - 给定一个单词列表,你如何找到重叠的常见字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547313/