题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b.
分析:最简单的方法就是不断的循环,得出每一个字符的出现次数,但是这样时间复杂度为O(n2),后来想了几种改进算法,虽然有点进步但时间复杂度任然是O(n2)。
最后还是利用哈希表的思想,利用空间换时间的策略,得到了一个很好的方法。
因为是一个字符,所以我们建立一个256的数组,利用字符的ASCII码的值为下标。记录字符出现的次数。
代码如下:
#include <iostream>
#include <string>
using namespace std;
void findChar(string &s)
{
int str[256]={0};
for (int i=0 ; i<s.size() ; ++i)
{
str[s[i]]++;
}
for (int i=0 ; i<s.size() ; ++i)
{
if (str[s[i]]==1)
{
cout<<s[i]<<endl;
return;
}
}
}
void main()
{
string s="abaccdeff";
findChar(s);
system("pause");
}