因为要求时间复杂度为O(N),所以不可以两层循环挨个比较,需要借助一块辅助空间,定义一个256大小的数组arr,将字符转化为assic码值作为下标。然后遍历统计数量等于二的。
注意第二次遍历查找字符串中第一个只出现两次的字符必须的按照字符串中字符出现的顺序遍历。如果从0到256遍历的可能找到的只出现两次的字符不一定是第一个出现的。
char FindFitst(const char* str)
{
char arr[256];
memset(arr,'0',256);
int len = strlen(str);
for(int i=0; i<str; ++i)
{
arr[*(str+i)]+=1;
}
for(int i=0; i<len; ++i)
{
if(arr[*(str+i)]=='2')
return *(str+i);
}
return NULL;
}