剑指 Offer 50. 第一个只出现一次的字符
解法
直观解法是遍历每个字符,将当前字符和其余字符比较判断有无重复。
这种解法时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)。
为了更快的解决问题可以使用哈希表,键为字符,值为对应的次数。char为8位所以有256种可能,可以定义一个数组下标为字符对应的ASCII码,元素为出现的次数。遍历两次字符串,第一次遍历记录次数,第二次遍历找到第一次出现次数为1的字符返回。
class Solution {
public char firstUniqChar(String s) {
if(s == null || s.length() == 0)
return ' ';
int[] myHash = new int[256];
for(int i = 0; i < s.length(); i++) {
myHash[s.charAt(i)]++;
}
for(int i = 0; i < s.length(); i++) {
if(myHash[s.charAt(i)] == 1)
return s.charAt(i);
}
return ' ';
}
}