1. 哈希/映射/散列表

1.1 【中等】字母异位词分组(49)

image.png

  1. /*
  2. * 先排序,再利用hashMap
  3. */
  4. public List<List<String>> groupAnagrams(String[] strs) {
  5. Map<String, List<String>> map = new HashMap<>();
  6. for (String str : strs) {
  7. char[] array = str.toCharArray();
  8. Arrays.sort(array);
  9. String key = new String(array);
  10. List<String> list = map.getOrDefault(key, new ArrayList<>());
  11. list.add(str);
  12. map.put(key, list);
  13. }
  14. return new ArrayList<>(map.values());
  15. }

1.1 【简单】有效的字母异位词(242)

image.png
第一种排序方法很简单,这边展示Hash解法。

  1. /*
  2. * 利用hashmap,如果get(t)-1后小于0,说明t的元素不在s中
  3. */
  4. public boolean isAnagram(String s, String t) {
  5. if (s.length() != t.length()) {
  6. return false;
  7. }
  8. Map<Character, Integer> table = new HashMap<>();
  9. for (int i = 0; i < s.length(); i++) {
  10. char ch = s.charAt(i);
  11. table.put(ch, table.getOrDefault(ch, 0) + 1);
  12. }
  13. for (int i = 0; i < t.length(); i++) {
  14. char ch = t.charAt(i);
  15. table.put(ch, table.getOrDefault(ch, 0) - 1);
  16. if (table.get(ch) < 0) {
  17. return false;
  18. }
  19. }
  20. return true;
  21. }