美文网首页力扣 初级算法 全套力扣精解
初级算法-字符串-有效的字母异位词

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

作者: coenen | 来源:发表于2021-08-19 06:47 被阅读0次
    给定两个字符串 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"

    考察要点:

    • 哈希表
    • 字符串
    • 排序

    相关文章

      网友评论

        本文标题:初级算法-字符串-有效的字母异位词

        本文链接:https://www.haomeiwen.com/subject/vxkjbltx.html