java - 给定一个单词列表,你如何找到重叠的常见字母

标签 java algorithm time-complexity space-complexity

我有一个输入的单词列表。您检查第一个单词的后缀到下一个单词的前缀。

例如。

平静 下一个 探戈 额外的

{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/

相关文章:

java - 我如何让 google guice 注入(inject)自定义记录器,比如 commons-logging 或 log4j 记录器

java - 如何在 Java 8 中填充 map ?

algorithm - 很具体的树遍历方法

c++ - 这个算法的运行时间复杂度是多少?您如何对其进行分析?

perl - 是否可以以具有 `O(log(n))` 查找和插入的方式使用 Perl 哈希?

algorithm - O(n.logn) 中的 Josephus 排列(移除顺序)

java - 当我用抽屉导航实现它时,SupportMapFragment 为空

java - 如何获得登录我的网络应用程序的所有用户的列表

java - 配置 SpringBootApplication 从属性读取时遇到问题

python - 整数 NxN 矩阵的精确行列式