查找一个字符串中第一个只出现两次的字符。
比如 “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,