Leetcode 245 Shortest Word Distance III

本文解析了LeetCode题目245最短单词距离III的解决方案,介绍了如何处理word1等于word2的情况,通过示例代码展示了如何在循环中同时考虑两种情况,达到更深层次的逻辑理解。

在这里插入图片描述
思路: 这道题其实就是243的小小变形,多了一种情况:word1 = word2而已。我自己的想法是把这种情况单独列出,觉得这样会比较清楚。答案是写在一起的,其实相比concise code,我更倾向short code,看起来比较厉害一点,而且我觉得能将两种情况放在一个循环里写出来,对于逻辑层面的理解来说会更加深入,是一种更深入理解的体现。我自己的思路我没有实现,因为我觉得很简单,下面展示答案代码:

class Solution {
    public int shortestWordDistance(String[] words, String word1, String word2) {
        int idx1 = -1, idx2 = -1, min = Integer.MAX_VALUE;
        for(int i = 0; i < words.length; i++){
            if(words[i].equals(word1)){
                idx1 = i;
                if(idx2 != - 1){
                    min = Math.min(min,idx1 - idx2);
                } 
            }
            if(words[i].equals(word2)){
                
                // 如果相等的话,那么idx1指向前一个满足条件的下标
                if(word1.equals(word2)){
                    idx1 = idx2; // 这边idx2就是前一个满足条件的下标
                }
                idx2 = i; // 与此同时idx2变为最新(当前)满足条件的下标
                if(idx1 != - 1){
                    min = Math.min(min,idx2 - idx1);
                }
            }
        }
        return min;
    }
}

总结:

  1. 243,244,245这三题放一起看。
  2. string相等比较用equals()函数,而不是用==
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值