1. class Solution {
  2. public boolean isAnagram(String s, String t) {
  3. if(s.length() != t.length())
  4. return false;
  5.  
  6. // O(n+m), O(K)~=O(1) because K<=26 characters
  7. Map<Character, Integer> map = new HashMap<>();
  8.  
  9. for(char ch : s.toCharArray())
  10. {
  11. map.put(ch, map.getOrDefault(ch, 0) + 1);
  12. }
  13.  
  14. for(char ch : t.toCharArray())
  15. {
  16. if(!map.containsKey(ch))
  17. return false;
  18.  
  19. int freq = map.get(ch);
  20. freq--;
  21.  
  22. if(freq == 0)
  23. map.remove(ch); // remove when zero
  24. else
  25. map.put(ch, freq); // update otherwise
  26. }
  27. if(map.size() == 0)
  28. return true;
  29. // if(map.values().stream().allMatch(value -> value == 0))
  30. // return true;
  31. return false;
  32. }
  33.  
  34. // Time: O(n log n) Space: O(n)
  35. public boolean isAnagram(String s, String t) {
  36. if(s.length() != t.length())
  37. return false;
  38.  
  39. char[] arr1 = s.toCharArray();
  40. Arrays.sort(arr1);
  41.  
  42. char[] arr2 = t.toCharArray();
  43. Arrays.sort(arr2);
  44.  
  45. int i=0,j=0;
  46. while(i<arr1.length && j<arr2.length)
  47. {
  48. if(arr1[i] != arr2[i])
  49. return false;
  50.  
  51. i++;
  52. j++;
  53. }
  54. return true;
  55. }
  56. }