题解 | #第一个只出现一次的字符#
第一个只出现一次的字符
http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c
因为题目说了字符串只有字母类型,那么可以使用2个数组,26个字母大小写一共需要52个位来存字母出现的次数,另一个数组存字母出现的位置,循环一遍将出现的次数和位置都存进数组里,最后遍历一遍字母出现次数的数字,只要次数是1就更新res位置,最后得到的就是位置最前的。 时间复杂度O(N),空间复杂度O(52*2)--->O(1)
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
int[] alph = new int[52];
int[] alphPosi = new int[52];
int res = -1;
int t;
for(int i = 0; i < str.length(); i++){
char s = str.charAt(i);
if(s >= 'A' && s <= 'Z'){
t = s - 'A';
alph[t]++;
alphPosi[t] = i;
}else if(s >= 'a' && s <= 'z'){
t = s - 'a' + 26;
alph[t]++;
alphPosi[t] = i;
}
}
for(int i = 0; i < 52; i++){
if(alph[i] == 1){
res = res == -1 ? alphPosi[i] : res > alphPosi[i] ? alphPosi[i] : res;
}
}
return res;
}
}