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; }
}