一、题目
二、两种解题思路
①方法一:
1)介绍:Map辅助法
方法解析:通过Map分别保存两个字符串中每个字母的数量,最后比较两个Map是否相等,相等则两字符串是异位词,否则不是。
时间复杂度:O(n)
空间复杂度:O(n)
2)核心代码:
public static boolean isAnagram(String s, String t) {
Map<Object, Integer> letter1 = new HashMap<>();
Map<Object, Integer> letter2 = new HashMap<>();
char tar1 = '0';
char tar2 = '0';
for (int i = 0; i < s.length(); i++) {
tar1=s.charAt(i);
if (!letter1.containsKey(tar1)) {
letter1.put(tar1, 0);
}
Integer sum = letter1.get(tar1);
sum++;
letter1.put(tar1, sum);
}
for (int j = 0; j < t.length(); j++) {
tar2=t.charAt(j);
if (!letter2.containsKey(tar2)) {
letter2.put(tar2, 0);
}
Integer sum = letter2.get(tar2);
sum++;
letter2.put(tar2, sum);
}
return letter1.equals(letter2);
}
①方法二:
1)介绍:排序法(使用快排或者堆排序)
方法解析:通过快排将两个字符串按照字母重新排序得到新的字符串,最后比较两个字符串是否相等,相等则两字符串是异位词,否则不是。
时间复杂度:O(NlogN)
空间复杂度:O(1)
2)核心代码:略(使用快排即可)
三、LeetCode成功截图
四、感想
感觉自己还没做到最好,希望大家有好方法指教下,加油,加油,再加油,坚持,坚持,再坚持。