LeetCode - #244 最短单词距离 II(会员题)

256 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

前言

本题为 LeetCode 的高级会员解锁题

我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新到 243 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:中等

1. 描述

请设计一个类,使该类的构造函数能够接受一个字符串数组。然后再实现一个方法,该方法能够分别接收两个单词,并返回列表中这两个单词之间的最短距离。

实现 WordDistanc 类:

  • WordDistance(String[] wordsDict) 用字符串数组 wordsDict 初始化对象。
  • int shortest(String word1, String word2) 返回数组 worddictword1word2 之间的最短距离。

2. 示例

示例 1

输入: ["WordDistance", "shortest", "shortest"]
[[["practice", "makes", "perfect", "coding", "makes"]], ["coding", "practice"], ["makes", "coding"]]
输出: [null, 3, 1]
解释:
WordDistance wordDistance = new WordDistance(["practice", "makes", "perfect", "coding", "makes"]);
wordDistance.shortest("coding", "practice"); // 返回 3
wordDistance.shortest("makes", "coding"); // 返回 1

提示:

  • 1 <= wordsDict.length <= 3 * 10^4
  • 1 <= wordsDict[i].length <= 10
  • wordsDict[i] 由小写英文字母组成
  • word1word2 在数组 wordsDict
  • word1 != word2
  • shortest 操作次数不大于 5000

3. 答案

题解

class WordDistance {
     var m:[String:[Int]] = [String:[Int]]()
     init(_ words: [String]) {
         // perform some initialization here
         for i in 0..<words.count
         {
             //判断是否为空
             if m[words[i]] == nil
             {
                 m[words[i]] = [Int]()
             }
             m[words[i]]!.append(i)
         }
     }
     
     func shortest(_ word1:String,_ word2:String) -> Int {
         var i:Int = 0
         var j:Int = 0
         var res:Int = Int.max
         while(i < m[word1]!.count && j < m[word2]!.count)
         {
             res = min(res, abs(m[word1]![i] - m[word2]![j]))
             if m[word1]![i] < m[word2]![j]
             {
                 i += 1
             }
             else
             {
                 j += 1
             }
         }
         return res
     }
 }

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。