题解 | 第一个只出现一次的字符
第一个只出现一次的字符
https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&&tqId=11187&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
敲黑板的知识点:
- ASCII中大写字母在小写字母前面
- ASCII中大写字母的范围是65-90
- ASCII中小写字母的范围是97-122
- ASCII中大写字母和小写字母之间有6个字符
因此熟悉了上面的规律之后,可以使用一个长度为26+26+6 = 58的数组作为哈希表,但是如果记不住呢,那就像下面这样写:
public class Solution { public int FirstNotRepeatingChar(String str) { int[] a = new int[26]; int[] b = new int[26]; for (char c : str.toCharArray()) { if (Character.isUpperCase(c)) { a[c-'A']++; } else { b[c-'a']++; } } int i = 0; for (char c : str.toCharArray()) { if (Character.isUpperCase(c)) { if (a[c-'A'] == 1) return i; } else { if (b[c-'a'] == 1) return i; } i++; } return -1; } }