leetcode 242 有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

  1. //v1.0 使用排序
  2. class Solution {
  3. public boolean isAnagram(String s, String t) {
  4. char[] sChar = s.toCharArray();
  5. char[] tChar = t.toCharArray();
  6. Arrays.sort(sChar);
  7. Arrays.sort(tChar);
  8. return Arrays.equals(sChar,tChar);
  9. }
  10. }
  11. //v2.0 标签:哈希映射
  12. //首先判断两个字符串长度是否相等,不相等则直接返回 false
  13. //若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
  14. //s 负责在对应位置增加,t 负责在对应位置减少
  15. //如果哈希表的值都为 0,则二者是字母异位词
  16. class Solution {
  17. public boolean isAnagram(String s, String t) {
  18. if(s.length() != t.length()) return false;
  19. int[] alphabet = new int[26];
  20. for(int i = 0;i<s.length();i++){
  21. alphabet[s.charAt(i)-'a']++;
  22. alphabet[t.charAt(i)-'a']--;
  23. }
  24. for(int j = 0;j<26;j++){
  25. if(alphabet[j]!=0) return false;
  26. }
  27. return true;
  28. }
  29. }

leetcode 1207 独一无二的出现次数

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

  1. //v1.0
  2. class Solution {
  3. public boolean uniqueOccurrences(int[] arr) {
  4. Map<Integer,Integer> map = new HashMap<Integer,Integer>();
  5. int[] nums = new int[2001];
  6. for(int i=0;i<arr.length;i++){
  7. nums[arr[i]+1000]++;
  8. }
  9. for(int j=0;j<2001;j++){
  10. if(nums[j]==0) continue;
  11. if(map.containsKey(nums[j])){
  12. return false;
  13. }
  14. map.put(nums[j],j);
  15. }
  16. return true;
  17. }
  18. }
  19. //v2.0
  20. class Solution {
  21. public boolean uniqueOccurrences(int[] arr) {
  22. HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
  23. for(int elem : arr){
  24. map.put(elem,map.getOrDefault(elem,0)+1);
  25. }
  26. return map.size() == new HashSet<Integer>(map.values()).size();
  27. }
  28. }