同一种方法,我用的二维数组,,,
查了一下发现String本身就是一个字符数组,charAt()方法也是根据数组下标返回值,所以我认为楼上大佬的方法更好些。

public class Solution {
    public int FirstNotRepeatingChar(String str) {

        // 大写与小写之间存在六个其他字符,因此用58,
        int [][] position = new int [58][2];

        // 因为需要多次length() 在这里直接提取
        int length = str.length();
        int target = length;

        // 一边进行遍历一遍记录重复数目以及最早出现的位置
        for ( int i = length-1; i>=0; i-- ){
            int index = str.charAt(i) - 'A';
            position[index][0]++;
            position[index][1] = i;
        }

        // 找到只出现一次且位于字符串最靠前的字符
        for( int i = 0; i < position.length; i++ ){
            if( position[i][0] == 1 && position[i][1] < target ){
                target =  position[i][1];
            }
        }

        // 如果target值改变,则存在目标字符
        if( target < length ) return target;

        return -1;
    }
}