[LeetCode每日一題] - 709. 轉換成小寫字母

語言: CN / TW / HK

題目

給你一個字串 s ,將該字串中的大寫字母轉換成相同的小寫字母,返回新的字串。

示例 1:

輸入:s = "Hello"
輸出:"hello"

示例 2:

輸入:s = "here"
輸出:"here"

示例 3:

輸入:s = "LOVELY"
輸出:"lovely"

提示:

1 <= s.length <= 100
s 由 ASCII 字符集中的可列印字元組成

題解

解法一:利用Swift語言特性

時間複雜度:O(n)

空間複雜的:O(n)

程式碼:

func toLowerCase(_ s: String) -> String {
        return s.lowercased()
}

提交結果:

解法二:將大小寫字元寫入字典,遍歷查詢替換

時間複雜度:O(n)

空間複雜的:O(n)

程式碼:

func toLowerCase(_ s: String) -> String {
        var result: String = s
        for item in s {
            result = result.replacingOccurrences(of: String(item), with: lower(String(item)))
        }
        return s.lowercased()
    }
    private func lower(_ s: String) -> String {
        let hash = ["A":"a", "B":"b", "C":"c", "D":"d", "E":"e", "F":"f",
                    "G":"g", "H":"h", "I":"i", "J":"j", "K":"k", "L":"l",
                    "M":"m", "N":"n", "O":"o", "P":"p", "Q":"q", "R":"r",
                    "S":"s", "T":"t", "U":"u", "V":"v", "W":"w", "X":"x",
                    "Y":"y", "Z":"z"]

        if let s1 = hash[s] {
            return s1
        }
        return ""
    }

提交結果:

解法三:利用ASCII碼

大寫字母A-Z的ASCII碼範圍為[65,90]

小寫字母A-Z的ASCII碼範圍為[97,122]

時間複雜度:O(n)

空間複雜的:O(1)

程式碼:

func toLowerCase(_ s: String) -> String {
        var result: String = ""
        for item in s.unicodeScalars {
            if item.value >= 65, item.value <= 90  {
                result += String(UnicodeScalar(item.value + 32)!)
            }else {
                result += String(UnicodeScalar(item.value)!)
            }
        }
        return s.lowercased()
    }

提交結果:

LeetCode連結