题目
(2006 Google)在一个字符串中找到第一个只出现一次的字符,如输入:abaccdeff,则返回b。
解法
1. 暴力破解方法O(n*n)。第一次循环遍历字符串中的每个字符,然后第二层循环,使用当前字符遍历之后的整个字符串,如果之后字符串中没有重复的字符,则为第一个只出现一次的字符。
2. 这里可以考虑参照计数排序的思想,使用一个辅助空间,对字符数组中的每个字符进行计数,然后遍历计数结果,得到第一个统计结果=1的元素,即为第一个只出现一次的元素。需要说明的是,这里的辅助空间可以利用ASCII编码,在整型数组中保存字符的ASCII编码。或者使用HashMap或HashTable的数据结构。这种方式的时间复杂度为:O(n)。
FIND-ONLYONE-FIRST(String str):
if str == null:
return null;
char[] strArray = str.toCharArray();
int[] count = new int[256]; // 这里存入的为每个字符的ASCII编码值
for i 0 to count.length:
count[i] = 0;
for i = 0 to str.length:
count[strArray[i]] = count[strArray[i]] + 1;
for i = 0 to str.length: // 遍历找到第一个count为1的字符
if count[strArray[i]] == 1:
return strArray[i];
return null;