给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
摘一个示例做个说明.
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
条件分析:
- 两个字符串比较 -> 字符串操作
- s、t 每个字符出现的次数都相同 -> 字符串长度相同
解决思路1:
- 根据分析1,字符串转换后进行比较
- 跟判断长度,不同则不是
字符串转数组,然后数组排序后比较数组是否相等
解决思路2:
- 循环一个字符串,存储哈希表记录其字符和频次
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"
考察要点:
- 哈希表
- 字符串
- 排序
网友评论