题目
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
解题思路
第一步:使用2个长度52的数组,一个用来保存字符的个数,一个用来保存字符的下标
第二步:遍历记录个数的数组,找到个数为1,下标最小的值。
代码如下
public class Solution {
public int FirstNotRepeatingChar(String str) {
int[] chs = new int[52];
int[] index = new int[52];
for (int i = 0; i < str.le ngth(); i++) {
char c = str.charAt(i);
if (Character.isUpperCase(c)) {
chs[c - 'A' + 26]++;
index[c - 'A' + 26] = i;
} else {
chs[c - 'a']++;
index[c - 'a'] = i;
}
}
int min = Integer.MAX_VALUE;
for (int i = 0; i < index.length; i++) {
if (chs[i] == 1) {
min = Math.min(min, index[i]);
}
}
return min == Integer.MAX_VALUE ? -1 : min;
}
}