解题思路
242. 有效的字母异位词
这个题目主要是判断字符和字符个数
- 排序:转换成数组进行排序后,然后再转换成字符串用equal比较
- 哈希表:存放第一个字符串中的每一个字符及其出现的次数,然后遍历第二个字符串,比较二个字符串出现的字符及出现的次数是否相同。
代码
方法一:排序
class Solution {
//数组的排序,排序后然后换成字符串用equal比较
public static boolean isAnagram(String s, String t) {
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
String a = new String(c1);
String b = new String(c2);
if(a.equals(b)) {
return true;
}
return false;
}
}
简化:
class Solution {
//数组的排序,排序后然后换成字符串用equal比较
public static boolean isAnagram(String s, String t) {
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
return Arrays.equals(c1, c2);
}
}
方法二:哈希表
class Solution {
//哈希表 :存放每一个字符及其出现的次数
public static boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) return false;
Map<Character , Integer> map = new HashMap<>();
for(int i = 0 ; i<s.length() ; i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0)+1); //把每一个字符和其出现的次数加入哈希表
}
for(int k=0 ; k<t.length() ; k++) {
char c= t.charAt(k);
map.put(c, map.getOrDefault(c, 0)-1); //每遍历到相应的字符就把次数减1
if(map.get(c)<0) { //如果减到小于0,说明不匹配
return false;
}
}
return true;
}
}