我是靠谱客的博主 爱笑曲奇,最近开发中收集的这篇文章主要介绍【LeetCode - 243】最短单词距离1、题目描述2、解题思路3、解题代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 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、解题代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部