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