給予一個字串陣列,回傳所有的字串當其為另一個字串的子字串。
為了加速需要判斷,可以先根據文字數由小到大升冪排序。這樣子左和右就不用各檢查一次。
Routines
class Solution {
func stringMatching(_ words: [String]) -> [String] {
let words = words.sorted { $0.count < $1.count }
var results = [String]()
for left in 0..<words.count - 1 {
for right in left + 1..<words.count {
guard words[right].contains(words[left]) else { continue }
results.append(words[left])
break
}
}
return results
}
}
令 num 的位數為 n
Big O | 說明 | |
---|---|---|
時間複雜度 | O(n^2) | 雙層的線性走訪 O(n^2),其中雖然有排序用了 O(nlogn) 但是只取最高次方項因此為 O(n^2) |
空間複雜度 | O(n) | 在最佳情形之下會用到 n - 1 個空間,因此為 O(n) |
以上,就是今天的 LeetCode in Swift ,如果有什麼問題和回饋歡迎留言一起討論,今天就到這裡,明天見!