关于字符串的一个算法,该怎么解决

关于字符串的一个算法
在一个字符串中找到第一个只出现一次的字符。

比如abaccdeff,输出b。

------解决方案--------------------

#include "iostream "
#include "map "
#include "string "

using namespace std;

int main()
{
string str;
cout < < "enter you string : ";
cin> > str;

map <char, int> mapStr;
for (size_t i = 0; i < str.size(); ++i)
mapStr[str[i]]++;

map <char, int> ::iterator itor = mapStr.begin();
for (; itor != mapStr.end(); ++itor)
{
if (itor-> second == 1)
break;
}
if (itor != mapStr.end())
cout < < "the first char is : " < <itor-> first < <endl;
else
cout < < "no char " < <endl;

return 0;
}
------解决方案--------------------
#include <iostream>
#include <string>
using namespace std;
int main()
{
char ch=0;
string a;
int i,j,x;
cin> > a;
cout < <(x=a.length());
for(i=0;i <x;i++)
{
for(j=i+1;j <x;j++)
{
if(a[i]==a[j])
break;
if(j==(x-1))
ch=1;
}
if(ch==1)
{
cout < <a[i];
break;
}
}
}
也可以,哈哈
------解决方案--------------------
无论数据有多少,附加空间都是256个整数,明显是O(1)。256 * O(1) 结果还是O(1)。

对于char的串,字符只有256种。事实上,对于C风格字符串,有效字符只有255种。

如果是wchar_t的串,则需要64k个整数的附加空间,虽然这个数字不小,但仍然是O(1)。

如果想减少内容用量,可以改用std::map <string/wstring, int> 代替,这样所需附加空间可能会减少(也可能会增加,取决于数据中出现的字符的种类),但时间复杂度提升为N*O(N)。