核心思想
如果把两个字符串按照ASII码排序的话,那么两个字符串完全相同。最后返回true即可。否则的话就返回false。
方法:哈希表
解题步骤
1.判断两个字符串的长度是否相等,如果两个字符串不想等,自然不是有效的字母异位词,按照题意直接返回false即可。
public boolean isAnagram(String s, String t) {
int len1 = s.length();
int len2 = t.length();
if(len1 != len2) return false;
}
2.分别遍历字符串s 和 字符串t 把字符串s的所有元素都放到哈希表中,遍历字符串s时不论字符是否存在,都将其出现的次数+1.遍历字符串t时,不断的把哈希表中出现过的元素-1.这里的哈希表存储的是字符和数字对,用来统计字符出现的次数。
HashMap<Character,Integer> map = new HashMap<>();
for(int i = 0;i<len1;i++){
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
}
for(int i = 0;i<len2;i++){
map.put(t.charAt(i),map.getOrDefault(t.charAt(i),0)-1);
}
3.遍历哈希表中元素出现的次数,如过最后得到的所有元素出现次数位0就证明这是一个有效的字母异位词。比如说第一个字符串cat 第二个字符串 tca 最终哈希表会把各个元素出现的次数减为0.证明上述两个字符串是有效的字母异位词。
完整代码
class Solution {
public boolean isAnagram(String s, String t) {
int len1 = s.length();
int len2 = t.length();
if(len1 != len2) return false;
HashMap<Character,Integer> map = new HashMap<>();
for(int i = 0;i<len1;i++){
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
}
for(int i = 0;i<len2;i++){
map.put(t.charAt(i),map.getOrDefault(t.charAt(i),0)-1);
}
for(int val: map.values()){
if(val != 0){
return false;
}
}
return true;
}
}