给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。
注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)。
示例 1:输入: s = "anagram", t = "nagaram" 输出: true
示例 2:输入: s = "rat", t = "car" 输出: false
示例 3:输入: s = "a", t = "a" 输出: false
提示:1 <= s.length, t.length <= 5 * 104
s and t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
注意:本题与主站 242 题相似(字母异位词定义不同)
1、哈希辅助;时间复杂度O(n),空间复杂度O(1)
func isAnagram(s string, t string) bool {
if len(s) != len(t) || s == t {
return false
}
sr := []rune(s)
tr := []rune(t)
rec := make(map[rune]int, len(sr))
for i := range sr {
rec[sr[i]]++
rec[tr[i]]--
}
for _, n := range rec {
if n != 0 {
return false
}
}
return true
}
2、排序比较;时间复杂度O(nlog(n)),空间复杂度O(n)
func isAnagram(s string, t string) bool {
if len(s) != len(t) || s == t {
return false
}
sArr := make([]int, len(s))
tArr := make([]int, len(t))
for i := 0; i < len(s); i++ {
sArr[i] = int(s[i] - 'a')
tArr[i] = int(t[i] - 'a')
}
sort.Ints(sArr)
sort.Ints(tArr)
for i := 0; i < len(s); i++ {
if sArr[i] != tArr[i] {
return false
}
}
return true
}
Easy题目,题目类似leetcode 242.有效的字母异位词
页面更新:2024-05-24
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号