初级算法-字符串-有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

摘一个示例做个说明.
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
条件分析:
  1. 两个字符串比较 -> 字符串操作
  2. s、t 每个字符出现的次数都相同 -> 字符串长度相同
解决思路1:
  1. 根据分析1,字符串转换后进行比较
  2. 跟判断长度,不同则不是
字符串转数组,然后数组排序后比较数组是否相等
解决思路2:
  1. 循环一个字符串,存储哈希表记录其字符和频次
    2.然后再循环另一个字符串,如果哈希表对应的字符存在,则减少频次
利用哈希表进行存储和查找,如果不存在则返回false

代码实现-Swift版本:

思路1代码:

func isAnagram(_ s: String, _ t: String) -> Bool {
    if s.count != t.count {
        return false
    }
    
    return Array(s).sorted() == Array(t).sorted()
}

思路2代码:

func isAnagram(_ s: String, _ t: String) -> Bool {  
    if s.count != t.count {
        return false
    }
    var map:[Character : Int] = [:]
    for item in s {
        map[item, default: 0] += 1
    }
    
    for item in t {
        if map[item] == nil {
            return false
        }else{
            map[item]! -= 1
            
            if map[item]! < 1 {
                map.removeValue(forKey: item)
            }
        }
    }
    
    if map.count < 1 {
        return true
    }
    
    return false
}

测试用例:

字符串都为空字符串: let s = "", t = ""
字符串相同: let s = "str", t = "str"
字符位置不相同: let s = "rst", t = "str"
字符长度不相同: let s = "rest", t = "str"

考察要点:

  • 哈希表
  • 字符串
  • 排序

你可能感兴趣的:(初级算法-字符串-有效的字母异位词)