1.问题描述
编写一个高效的函数,找到字符串中首个非重复字符。
例如:total 中的 首个非重复字符是o,teeter是r。
2.问题讨论
我们这里假设处理的是ASCII字符,字符总共就128个。
为了避免每次搜索之前有没有出现该字符,应该用hash表来做。
可以用一个int hash[128]来记录相关字符出现的次序。
3.代码
char FirstNonReapeated(char* data)
4.效率分析
很简单的可以看出,我们只需要两次循环,至多O(2n)。
{
assert(*data);
char * tmp = data;
char hash[128] = {0};
while (*tmp != '/0')
{
++hash[*tmp];
++tmp;
}
tmp = data;
while(*tmp != '/0')
{
if (1 == hash[*tmp])
{
return *tmp;
}
++tmp;
}
//assert(false);
}
int main(int argc, char* argv[])
{
char charArr[] = "";
cout << FirstNonReapeated(charArr) << endl;
return 0;
}