查找一个字符串中第一个只出现两次的字符
2017-07-19 22:12
267 查看
查找一个字符串中第一个只出现两次的字符。
比如 “abcdefabcdefabc” 中第一个只出现两次为‘d’,
要求时间复杂度O(N),空间复杂度O(1)
这个题和在一个字符串中查找第一个只出现一次,只出现两次是一个套路。
第一眼看到要求空间复杂度为O(1)有点蒙。突然想了一下。。字符最多256 个(前提是ASCII字符)。。不管N 有多大,也有256 限制它。所以空间复杂度依然是 O(N)。
如果还要优化可以使用位图,然后可以题目要求根据出现的次数选择不同的比特位来识别。
还有一类变形是让确认一个字符串的所有字符是否 全部相同,原理也类似。
比如 “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; }
相关文章推荐
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 【字符串】查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) /查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符。要求 时o(n) 空o(1)
- 【每日一题】查找一个字符串中第一个只出现两次的字符。要求时间复杂度为O(N),空间复杂度为O(1)
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 查找一个字符串中第一个只出现两次的字符。
- day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 【每日一题】查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符,要求时间复杂度为O(N)。-替换字符串中的空格为$$$。要求时间复杂度为O(N)
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 查找字符个数--查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 寻找一个字符串中第一个只出现两次的字符
- 在一个字符串中查找第一个只出现一次的字符,要求复杂度为O(N)
- 一个字符串中查找第一个只出现一次的字符。 要求复杂度为O(N).
- 给定一个字符串,查找该字符串中第一个重复出现的字符索引。要求:时间复杂度为O(n)。