---
description: 值得再做一次
---

# #243 Shortest Word Distance

[LeetCode](https://leetcode.com/problems/shortest-word-distance/)

```
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 做運算，但會變超複雜(很多迴圈) 後來直接看人家寫法，原來這麼簡單啊 !!&#x20;

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-Ls33metthbwKd2aGWiY%2F-Ls34drwnTyhOhTybDQc%2F1.jpg?alt=media\&token=bb361ce2-44ad-4977-982b-83a675c8c625)

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

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-Ls33metthbwKd2aGWiY%2F-Ls34hjN2sQh6VOrk0_W%2F2.jpg?alt=media\&token=50cdcee8-345c-471b-954d-107fa5241c18)

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-Ls33metthbwKd2aGWiY%2F-Ls352O_0EUxmEk5BPhj%2F3.jpg?alt=media\&token=0bad3296-2fe3-4a7b-8655-e53b92149443)

```
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
```

