题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
解法一:存入哈希表然后对比
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
HashMap<Character,Integer> hm = new HashMap<>();
for(int i = 0;i < s.length();i++){
//将s放入HashMap
char c = s.charAt(i);
hm.put(c,hm.getOrDefault(c,0)+1);
}
for(int i = 0;i < t.length();i++){
//按找t逐一比对hm中的元素
char c = t.charAt(i);
hm.put(c, hm.getOrDefault(c, 0) - 1);
if (hm.get(c) < 0) {
return false;
}
}
return true;
}
}
时间复杂度:O(n^2),空间复杂度:O(n)
解法二:先排序后比较
将字符串转换为字符数组然后用equals方法进行比较。
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);
}
}
时间复杂度:O(nlogn),空间复杂度:O(n)