看了一下各位大佬的思路,大多都是用Map来解答的。想到一个用动态规划做的思路。
1.定义一个布尔型数组;
2.从后开始往前遍历。对每个字符再从当前位置向后遍历,如果遇到与其相同的,那么就将这两个位置的flag[i],flag[j]都设置为true;
3.最后,从前向后遍历flag数组,那么第一个仍为false的位置即为第一个只出现一次的字符。

public class Solution {
    public int FirstNotRepeatingChar(String str) {
        int len = str.length();
        if(len==0) return -1;
        if(len==1) return 0;
        boolean[] flag = new boolean[len];
        for(int i=len-1;i>=0;i--){
            for(int j=i+1;j<len;j++){
                if(str.charAt(i)==str.charAt(j)){
                    flag[i] = true;
                    flag[j] = true;
                    break;
                }
            }
        }
        for(int i=0;i<len;i++){
            if(flag[i]==false)
                return i;
        }
        return -1;
    }
}