题目描述

image.png

解题步骤

使用哈希表映射26个字母在数组中,此时注意不能使用hashMap,因为要找第一个元素,hashMap映射出的entry并不是有序的。

  1. public char firstUniqChar(String s) {
  2. int[] array = new int[26];
  3. for (int i = 0; i < s.length(); i++) {
  4. array[s.charAt(i) - 'a'] += 1;
  5. }
  6. for (int i = 0; i < s.length(); i++) {
  7. if (array[s.charAt(i) - 'a'] == 1) {
  8. return s.charAt(i);
  9. }
  10. }
  11. return ' ';
  12. }

但使用LinkedHashMap有序的hash集合可以实现。

  1. /**
  2. * 有序的hashMap实现
  3. *
  4. * @param s
  5. * @return
  6. */
  7. public char firstUniqChar(String s) {
  8. LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
  9. for (int i = 0; i < s.length(); i++) {
  10. map.put(s.charAt(i), map.getOrDefault(s.charAt(i),0) + 1);
  11. }
  12. for (Map.Entry<Character, Integer> entry : map.entrySet()) {
  13. if (entry.getValue() == 1)
  14. return entry.getKey();
  15. }
  16. return ' ';
  17. }