敲黑板的知识点:

  1. ASCII中大写字母在小写字母前面
  2. ASCII中大写字母的范围是65-90
  3. ASCII中小写字母的范围是97-122
  4. 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;
    }
}