题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例1:
1 | 输入: s = "anagram", t = "nagaram" |
示例2:
1 | 输入: s = "rat", t = "car" |
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
注意:
你可以假设字符串只包含小写字母。
进阶
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
如果输入包含unicode字符的话,使用哈希表。如果使用数组的话,unicode范围过大,浪费空间
解法
解法一:
哈希表
借助哈希表,把s里面的每个字符,以及次数都保存在哈希表里面。遍历t,如果发现t中的字符c不在哈希表中, 则返回false,否则,字符c的次数减一。
如果字符c的次数减一完之后已经为0了,从哈希表中移除字符c。
Java-哈希表
1 | public boolean isAnagram(String s, String t) { |
解法二:
使用数组
声明一个26长度的数组,遍历s,对s中的每个c,对数组索引为c的位置自增。
遍历t,对t中的每个字符c,如果数组中对应位置的计数为0,返回false,否则自减一
Java
1 | public boolean isAnagram(String s, String t) { |
解法三:
排序
将字符串s和t转为字符数组,排序,挨个字符挨个字符比较
Java
1 | public boolean isAnagram(String s, String t) { |