#243 Shortest Word Distance

值得再做一次

LeetCode

Given a list of words and two words word1 and word2, 
return the shortest distance between these two words in the list.

input: 給兩個 word
output: 找到他們最短距離
Example:
Assume that words = ["practice", "makes", "perfect", "coding", "makes"].

Input: word1 = “coding”, word2 = “practice”
Output: 3
Input: word1 = "makes", word2 = "coding"
Output: 1
Note:
You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.
*/

/**
 * @param {string[]} words
 * @param {string} word1
 * @param {string} word2
 * @return {number}
 */
var shortestDistance = function(words, word1, word2) {}

Edge Case

Array 值重覆 ?

如何解

一開想說 對應到 word1, word2 的位置存成兩個 Array 然後再用 Math.min 做運算,但會變超複雜(很多迴圈) 後來直接看人家寫法,原來這麼簡單啊 !!

先定義 p1, p2 為 -1 (default 值),然後每一次都去相減找到最小值。這樣就不用再做一次了

var shortestDistance = function(words, word1, word2) {
    let result = words.length;
    let p1 = -1;
    let p2 = -1;
    words.forEach((item, index) => {
        if(item == word1){
            p1 = index;
        }else if(item == word2){
            p2 = index
        }

        if(p1 > -1 && p2 > -1){
           let temp = Math.abs(p1 - p2)
           if(temp < result){
               result = temp
           }
        }
    })
    return result;
};

console.log(shortestDistance(["ma", "pe", "co", "ma"], "co", "ma"))
// faster than 96.67% of JavaScript online submissions

Last updated