概述
文章目录
- 1、题目描述
- 2、解题思路
- 3、解题代码
1、题目描述
2、解题思路
本题先进行转化,遍历一次 words,把 word1 和 word2 的出现位置分别记录在数组 w1[] 和 w2[] 中。
现在问题就变成:已知两个递增数组 w1[] 和 w2[],从两个数组分别找出一个元素,使得这两个元素的差为最小值。
找出两个元素差最小值的步骤:
1、定义两个指针 i 和 j,分别指向两个数组的当前元素;初始化 min = Integer.MAX_VALUE;
2、如果 min > Math.abs(w1[i]-w2[j]),说明找到了更短的差值,更新 min = Math.abs(w1[i]-w2[j]);
3、如果 w1[i] < w2[j] ,说明 w[i] 为小值,遍历下一组差值则 j = j + 1,让 w2[j] 变为小值;反之亦然。
4、只要 i 和 j 都没超出 w1 和 w2 的索引范围,就循环 2-3 步。
5、返回 min
3、解题代码
class Solution {
public int shortestDistance(String[] words, String word1, String word2) {
List<Integer> w1 = new ArrayList<>();
List<Integer> w2 = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
if (word1.equals(words[i])) {
w1.add(i);
} else if (word2.equals(words[i])) {
w2.add(i);
}
}
int i = 0, j = 0;
int min = Integer.MAX_VALUE;
int temp;
int w1Index;
int w2Index;
while (i < w1.size() && j < w2.size()) {
w1Index = w1.get(i);
w2Index = w2.get(j);
min = Math.min(Math.abs(w1Index - w2Index), min);
if (w1Index < w2Index) i++;
if (w2Index < w1Index) j++;
}
return min;
}
}
最后
以上就是爱笑曲奇为你收集整理的【LeetCode - 243】最短单词距离1、题目描述2、解题思路3、解题代码的全部内容,希望文章能够帮你解决【LeetCode - 243】最短单词距离1、题目描述2、解题思路3、解题代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复