Skip to content

Latest commit

 

History

History
43 lines (37 loc) · 979 Bytes

0242-Valid Anagram.md

File metadata and controls

43 lines (37 loc) · 979 Bytes

Valid Anagram

Given two strings s and t , write a function to determine if t is an anagram of s.

Example 1:

Input: s = "anagram", t = "nagaram"
Output: true

Example 2:

Input: s = "rat", t = "car"
Output: false

Note: You may assume the string contains only lowercase alphabets.

Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case?

Solution

O(s+t) Time, O(s) Space:

class Solution {
    func isAnagram(_ s: String, _ t: String) -> Bool {
        var sMap = s.reduce(into: [Character: Int]()) { $0[$1, default: 0]+=1 }
        for char in t {
            if let count = sMap[char] {
                if count > 1 {
                    sMap[char] = count-1
                } else {
                    sMap.removeValue(forKey: char)
                }
            } else {
                return false
            }
        }
        return sMap.isEmpty
    }
}