返回

Swift LeetCode - 有效的字母异位词:从无序到有序的艺术

IOS







## 有效的字母异位词

在计算机科学中,字母异位词是指由相同字母组成但不按相同顺序排列的两个或多个单词或短语。判断两个字符串是否是字母异位词是一个经典的算法问题,经常出现在编程面试和算法竞赛中。

例如,以下字符串对是字母异位词:

"hello" 和 "olleh"
"anagram" 和 "nagmar"
"silent" 和 "listen"


## Swift 实现

Swift 是 Apple 开发的现代、安全且易于使用的编程语言,非常适合解决各种算法问题。在本节中,我们将使用 Swift 实现有效的字母异位词算法。

```swift
func isAnagram(_ s: String, _ t: String) -> Bool {
    // 检查两个字符串的长度是否相等
    guard s.count == t.count else {
        return false
    }

    // 创建一个字典来存储 s 中每个字符的出现次数
    var charCounts: [Character: Int] = [:]
    for char in s {
        charCounts[char, default: 0] += 1
    }

    // 检查 t 中每个字符的出现次数是否与 s 中相同
    for char in t {
        guard let count = charCounts[char], count > 0 else {
            return false
        }
        charCounts[char]! -= 1
    }

    // 如果所有字符的出现次数都相同,则返回 true
    return true
}

这个 Swift 实现使用了字典来存储 s 中每个字符的出现次数。然后,它遍历 t,检查每个字符的出现次数是否与 s 中相同。如果出现次数不同,则返回 false。如果所有字符的出现次数都相同,则返回 true。

时间复杂度

该算法的时间复杂度为 O(n),其中 n 是字符串的长度。这是因为算法遍历了字符串一次,并在字典中查找和更新键值对。

空间复杂度

该算法的空间复杂度也为 O(n),这是因为算法创建了一个字典来存储字符串中的字符和它们的出现次数。

结论

有效的字母异位词算法是一个经典的算法问题,经常出现在编程面试和算法竞赛中。在本文中,我们介绍了该算法的 Swift 实现,并分析了其时间复杂度和空间复杂度。希望你能从中有所收获,并能够将其应用到你的项目中。