同一种方法,我用的二维数组,,,
查了一下发现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;
}
} 
京公网安备 11010502036488号