第一个只出现一次的字符

题目

牛客网

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

解题思路

  1. 通过 LinkedHashMap 记录数组顺序,然后计算字符出现的次数
  2. 遍历找到第一个只出现 1次 的字符
  1. public int FirstNotRepeatingChar(String str) {
  2. LinkedHashMap<Character, Integer> data = new LinkedHashMap<>();
  3. char[] chars = str.toCharArray();
  4. for (char c : chars) {
  5. Integer count = data.getOrDefault(c, 0);
  6. data.put(c, count + 1);
  7. }
  8. Character res = null;
  9. for (Character c : data.keySet()) {
  10. if (data.get(c) == 1) {
  11. res = c;
  12. break;
  13. }
  14. }
  15. if (res == null) {
  16. return -1;
  17. }
  18. for (int i = 0; i < chars.length; i++) {
  19. if (chars[i] == res) {
  20. return i;
  21. }
  22. }
  23. return -1;
  24. }