您的位置:首页 > 其它

查找一个字符串中第一个只出现两次的字符

2017-07-19 22:12 267 查看
查找一个字符串中第一个只出现两次的字符。

比如 “abcdefabcdefabc” 中第一个只出现两次为‘d’,

要求时间复杂度O(N),空间复杂度O(1)

这个题和在一个字符串中查找第一个只出现一次,只出现两次是一个套路。

第一眼看到要求空间复杂度为O(1)有点蒙。突然想了一下。。字符最多256 个(前提是ASCII字符)。。不管N 有多大,也有256 限制它。所以空间复杂度依然是 O(N)。

如果还要优化可以使用位图,然后可以题目要求根据出现的次数选择不同的比特位来识别。

还有一类变形是让确认一个字符串的所有字符是否 全部相同,原理也类似。

char find_char_two(const char* str)
{
assert(str);
const char* start = str;
char count[256]; // 因为字符只有256 不管你字符串多长,都是O(1)的空间复杂度
memset(count, 0, sizeof(count));
// 统计次数
while (*start)
{
count[*start]++;
start++;
}
start = str;
while (*start)
{
if (count[*start] == 2)
{
return *start;
}
start++;
}
printf("没有出现两次的字符\n");
return -1;
}

int main()
{
//space_to_symbol();
char c = find_char_two("abcdefabcdefabc");
cout << c << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐