开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
前言
本题为 LeetCode 的高级会员解锁题
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
LeetCode 算法到目前我们已经更新到 242 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
难度水平:简单
1. 描述
给定一个字符串数组 wordDict 和两个已经存在于该数组中的不同的字符串 word1 和 word2 。返回列表中这两个单词之间的最短距离。
2. 示例
示例 1
输入: wordsDict = [“practice”, “makes”, “perfect”, “coding”, “makes”], word1 = “coding”, word2 = “practice”
输出: 3
示例 2
输入: wordsDict = [“practice”, “makes”, “perfect”, “coding”, “makes”], word1 = “makes”, word2 = “coding”
输出: 1
提示:
1 <= wordsDict.length <= 3 * 10^41 <= wordsDict[i].length <= 10wordsDict[i]由小写英文字母组成word1和word2在wordsDict中word1 != word2
3. 答案
题解 1
func shortestDistance(_ words: [String], word1: String, word2: String) -> Int {
var idx1: [Int] = [Int](), idx2 = [Int]()
var res = Int.max
for i in 0..<words.count {
if words[i] == word1 { idx1.append(i) }
else if words[i] == word2 { idx2.append(i) }
}
for i in 0..<idx1.count {
for j in 0..<idx2.count {
res = min(res, abs(idx1[i] - idx2[j]))
}
}
return res
}
print(shortestDistance(["practice", "makes", "perfect", "coding", "makes"], word1: "makes", word2: "coding"))
题解 2
func shortestDistance1(_ words: [String], word1: String, word2: String) -> Int {
var idx1: Int = -1, idx2 = -1
var res = Int.max
for i in 0..<words.count {
if words[i] == word1 { idx1 = i}
else if words[i] == word2 { idx2 = i}
if idx1 != -1 && idx2 != -1 {
res = min(res, abs(idx1 - idx2))
}
}
return res
}
print(shortestDistance1(["practice", "makes", "perfect", "coding", "makes"], word1: "coding", word2: "practice"))
// Print "3"
题解 3
func shortestDistance2(_ words: [String], word1: String, word2: String) -> Int {
var idx = -1
var res = Int.max
for i in 0..<words.count {
if words[i] == word1 || words[i] == word2 {
if idx != -1 && words[i] != words[idx] {
res = min(res, abs(i - idx))
}
idx = i
}
}
return res
}
print(shortestDistance2(["practice", "makes", "perfect", "coding", "makes"], word1: "coding", word2: "practice"))
// Prints "3"
点击前往 LeetCode 练习
关于我们
我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。