您的位置:首页 > 其它

查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)

2017-08-01 19:58 716 查看
因为要求时间复杂度为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐