思路一:

由于字符只出现一次,所以 该字符 第一次出现的位置 和 他最后出现的一次位置 是相同的,遍历字符串,如果第一次出现的位置等于 最后一次出现的位置,返回下标:

public class Solution {
    public int FirstNotRepeatingChar(String str) {
        char[] splitChat = str.toCharArray();
        for (int i = 0; i < splitChat.length; i++) {
            if (str.indexOf(splitChat[i]) == str.lastIndexOf(splitChat[i])) {
                return i;
            }
        }
        return -1;
    }
}

总结: 字符判断 用 == 因为是 八大类型;

思路二:

根据hashMap的特性,只允许出现一次 key, key不能相同,如果包含map.containsKey(str.charAt(i)) , value的值加一,根据这个特性,统计出单个字符串出现的次数,然后 遍历 map的value的值,如果等于 1,说明第一次出现一次,直接返回;

import java.util.HashMap;
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            if (map.containsKey(str.charAt(i))) { // 如果有 key 就 value加一,没有的话,放进去
                int time = map.get(str.charAt(i));  // 获取value
                map.put(str.charAt(i), ++time);
            } 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;
    }
}

使用hashMap统计 string 里面 字符出现的次数

public HashMap countChar(String str){
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            if (map.containsKey(str.charAt(i))) { // 如果有 key 就 value加一,没有的话,放进去
                int time = map.get(str.charAt(i));  // 获取value
                map.put(str.charAt(i), ++time);
            } else {
                map.put(str.charAt(i), 1);
            }
        }
        return map;
    }

// 解释: map里面的 key 代表字符,value 代表出现的次数