iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
Mobile Development

30天用 Swift 解 LeetCode 問題系列 第 19

Day 19 - 1408. String Matching in an Array - 解法與複雜度分析 - LeetCode in Swift

  • 分享至 

  • xImage
  •  

hero

基本資訊

題意

給予一個字串陣列,回傳所有的字串當其為另一個字串的子字串。

解法

先根據文字數排序

為了加速需要判斷,可以先根據文字數由小到大升冪排序。這樣子左和右就不用各檢查一次。

雙層走訪

  • 以左為主軸,右從左 + 1開始走訪

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

執行結果

  • Runtime: 31 ms (Beats 100.00%)
  • Memory: 14.8 MB (Beats 100.00%)

複雜度分析

令 num 的位數為 n

Big O 說明
時間複雜度 O(n^2) 雙層的線性走訪 O(n^2),其中雖然有排序用了 O(nlogn) 但是只取最高次方項因此為 O(n^2)
空間複雜度 O(n) 在最佳情形之下會用到 n - 1 個空間,因此為 O(n)

結語

以上,就是今天的 LeetCode in Swift ,如果有什麼問題和回饋歡迎留言一起討論,今天就到這裡,明天見!


上一篇
Day 18 - 1323. Maximum 69 Number - 解法與複雜度分析 - LeetCode in Swift
下一篇
Day 20 - 543. Diameter of Binary Tree - 解法與複雜度分析 - LeetCode in Swift
系列文
30天用 Swift 解 LeetCode 問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言