题目:在字符串中找出第一个只出现一次的字符。如输入“aaabbcddfffgh”,则输出'c'。
思路:最容易想到的就是从第一个字符开始,依次遍历字符串中的各个字符,将这个字符与其后面的每一个字符比较,如果其只出现一次则输出结果。时间复杂度为O(n^2).
我们选择一个O(n)的算法。
//找到字符串中第一次只出现一次的字符
char findFirstCharOnlyOnce(char* pString) {
if (NULL == pString) {
return '\0';
}
//初始化哈希表中的各个值为0
const int tableSize = 256;
unsigned int charCount[tableSize] = { };
for (int i = 0; i < tableSize; ++i) {
charCount[i] = 0;
}
//统计字符串中的各个字符出现的次数
char* pChar = pString;
while (*pChar != '\0') {
++charCount[(unsigned int) *pChar];
++pChar;
}
//遍历字符串在哈希表中找到只出现一次的字符
pChar = pString;
while (*pChar != '\0') {
if (1 == charCount[(unsigned int) *pChar]) {
return *pChar;
}
++pChar;
}
return '\0';
}
测试代码
#include<iostream>
using namespace std;
int main() {
char ch[] = "aabbcdefg";
cout << "第一次只出现一次的字符:" << findFirstCharOnlyOnce(ch) << endl;
return 0;
}
注:部分内容参考自剑指offer。