242、有效的字母异位词
基本思想:
哈希表
具体实现:
1、定义一个大小为26的数组record
2、record记录字符串s里字符出现的次数
3、需要把字符映射到数组也就是哈希表的索引上
字符a到字符z的ASCII是26个连续的数值
字符a映射到索引0,字符z映射到索引25
遍历s这个字符串时,
将s[i] -'a' 这个索引对应的record+1
4、检查字符串t对应的字符有没有出现在record上
遍历字符串t,
将t[i] - 'a' 这个索引对应的record-1
5、最后如果record的所有元素都是0,则s和t是字母异位词
代码:
class Solution { public boolean isAnagram(String s, String t) { int[] record = new int[26]; for (char c : s.toCharArray()){ record[c - 'a'] += 1; } for (char c : t.toCharArray()){ record[c - 'a'] -= 1; } for (int i : record){ if (i != 0){ return false; } } return true; } }
383、赎金信
代码:
class Solution { public boolean canConstruct(String ransomNote, String magazine) { //记录杂志字符串出现的次数 int[] arr = new int[26]; int temp; for (int i = 0; i < magazine.length(); i++) { temp = magazine.charAt(i) - 'a'; arr[temp]++; } for (int i = 0; i < ransomNote.length(); i++) { temp = ransomNote.charAt(i) - 'a'; //对于金信中的每一个字符都在数组中查找 //找到相应位减一,否则找不到返回false if (arr[temp] > 0) { arr[temp]--; } else { return false; } } return true; } }