最短单词距离
难度:
标签:
题目描述
代码结果
运行时间: 23 ms, 内存: 18.4 MB
/*
* 思路:
* 1. 使用IntStream来遍历数组下标。
* 2. 通过filter找到目标单词1和单词2的位置。
* 3. 计算所有位置之间的距离,并找到最小值。
*/
import java.util.stream.IntStream;
public class Solution {
public int shortestDistance(String[] words, String word1, String word2) {
int[] indices1 = IntStream.range(0, words.length)
.filter(i -> words[i].equals(word1))
.toArray();
int[] indices2 = IntStream.range(0, words.length)
.filter(i -> words[i].equals(word2))
.toArray();
return IntStream.of(indices1)
.flatMap(i1 -> IntStream.of(indices2).map(i2 -> Math.abs(i1 - i2)))
.min()
.orElse(Integer.MAX_VALUE);
}
}
解释
方法:
该题解的思路是先遍历一遍单词列表,将字符串 word1 和 word2 出现的位置分别记录在 index1 和 index2 两个列表中。然后使用两个嵌套循环,计算 index1 中每个位置与 index2 中每个位置的绝对差值,并存入 ans 列表。最后返回 ans 列表中的最小值,即为最短单词距离。
时间复杂度:
O(n^2)
空间复杂度:
O(n^2)
代码细节讲解
🦆
在嵌套循环中计算两单词位置的距离,是否有更高效的方法来减少计算次数或避免冗余计算?
▷🦆
返回的最短单词距离是基于所有可能的位置组合,是否存在一种策略可以在遍历过程中即时更新最短距离,从而避免存储所有距离?
▷🦆
代码中使用了两个独立的 if 语句来检查并记录 word1 和 word2 的位置,这种结构是否可能导致某些特定情况下的性能下降?例如,当 word1 和 word2 频繁交替出现时。
▷🦆
解决方案中将所有差值存入 ans 列表,然后再取最小值,这样做是否会导致不必要的内存使用,尤其是当 m 和 k 都很大时?
▷