给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
法1:哈希表
比较s和 t的长度,不同返回false
遍历字符串s,利用哈希表统计s中每个字符的出现次数
遍历字符串t,若有字符没有出现在s中,返回false。出现的每个字符,哈希表中对应
值-1(在这里,减一后若小于0,直接返回false。不需要考虑哈希表在遍历完后还有大于0的情况。因为若
两串长度相等,那么若两串包含的字符不相等,<0即可判断出来。)
遍历哈希表,若某个值不为0,返回false(这里不需要再遍历一遍哈希表。)
最后返回true。
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
HashMap<Character,Integer> hash = new HashMap<Character,Integer>();
for(char c:s.toCharArray()){
if(!hash.containsKey(c)){
hash.put(c,1);
}else{
hash.replace(c,hash.get(c)+1);
}
}
for(char c:t.toCharArray()){
if(!hash.containsKey(c))
return false;
else{
hash.replace(c,hash.get(c)-1);
if(hash.get(c)<0)
return false;
}
}
return true;
}
}
进阶问题:
依然用本代码哈希表解决即可。
法2:排序
长度不同则false
分别对两字符串排序
比较是否相等。
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
char[] s1 = s.toCharArray();
char[] t1 = t.toCharArray();
Arrays.sort(s1);
Arrays.sort(t1);
return Arrays.equals(s1,t1);
}
}