开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
前言
本题为 LeetCode 的高级会员解锁题
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
LeetCode 算法到目前我们已经更新到 243 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
难度水平:中等
1. 描述
请设计一个类,使该类的构造函数能够接受一个字符串数组。然后再实现一个方法,该方法能够分别接收两个单词,并返回列表中这两个单词之间的最短距离。
实现 WordDistanc 类:
WordDistance(String[] wordsDict)用字符串数组wordsDict初始化对象。int shortest(String word1, String word2)返回数组worddict中word1和word2之间的最短距离。
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^41 <= wordsDict[i].length <= 10wordsDict[i]由小写英文字母组成word1和word2在数组wordsDict中word1 != word2shortest操作次数不大于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 基础为核心的技术内容,也整理收集优秀的学习资料。