242. 有效的字母异位词
思路:可以用HashMap也可以用int[]
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
int[] dic = new int[26];
for (char ch : s.toCharArray()) {
dic[ch - 'a']++;
}
for (char ch : t.toCharArray()) {
if (dic[ch - 'a'] == 0)
return false;
dic[ch - 'a']--;
}
return true;
}
383. 赎金信
思路:记录字符以及字符出现的次数
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length())
return false;
int[] record = new int[26];
for (char ch : magazine.toCharArray()) {
record[ch - 'a']++;
}
for (char ch : ransomNote.toCharArray()) {
if (record[ch - 'a'] == 0)
return false;
record[ch - 'a']--;
}
return true;
}
49. 字母异位词分组
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> result = new ArrayList<>();
if (strs == null)
return result;
HashMap<String, List<String>> map = new HashMap<>();
for (String s : strs) {
int[] flag = new int[26];
for (char ch : s.toCharArray()) {
flag[ch - 'a']++;
}
String key = Arrays.toString(flag);
map.putIfAbsent(key, new ArrayList<>());
map.get(key).add(s);
}
for (String k : map.keySet()) {
result.add(map.get(k));
}
return result;
}