import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
// public int FirstNotRepeatingChar(String str) {
// //思路:这必然是要遍历所有的元素的,在遍历的过程中,将字母存入map中
// //key为这个字母,value为这个字母出现的次数.
// //然后再此遍历,返回第一个为1的i即可
// if(str== null || str.length()==0){
// return -1;
// }
// HashMap<Character,Integer> map = new HashMap<>();
// // char[] c = str.toCharArray();
// for(int i= 0; i < str.length();i++){
// if(map.containsKey(str.charAt(i))){
// map.put(str.charAt(i),map.get(str.charAt(i))+1);
// }else{
// map.put(str.charAt(i),1);
// }
// }
// for(int i= 0;i<str.length();i++){
// if(map.get(str.charAt(i)) ==1){
// return i;
// }
// }
// return -1;
// }

 public  int FirstNotRepeatingChar(String str) {
    //这一步数组长度设为128,是因为,在所有的字符编码中大写字母(A-Z: 65-90),小写字母(a-z: 97-122)
    //我们会发现,如果小于122,可能会报数组越界的异常
    int[] ints = new int[128];
    for (int i = 0; i < str.length(); i++) {
        //这一步的意思是;
        // 虽然我们每次得到的是一个char类型的字符,但是这个字符可以用来作为数组的索引下标
        //也就是,我们把每个英文字符当做一个map的key,即这里的数组索引下标,而数组中实际存储的是这个字符出现的次数
        //有相同的字符,也就是定位到数组的已有的那个位置,然后将其存储的实际数值加1
        char c = str.charAt(i);
        ints[c] = ints[c] + 1;
    }
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (ints[c] == 1) {
            return i;
        }
    }
    return -1;
}

}