这是早些年Google的一道笔试题:
给定一个字符串,查找其中第一个只出现一次的字符。
看起来是一道非常简单的题,但要提升它的效率就不那么容易想到了。下面介绍一种时间复杂度比较小的解法:
用数组实现一个建议的哈希表,其下标作为字符的映射,然后遍历一遍给定的字符串,记录对应字符出现的次数。然后以此以字符串中的字符做小标遍历一遍哈希表,返回第一个 1 的下标就好了。
具体实现请看:
#include <stdio.h> #include <assert.h> int find_first_appear_once(const char *str) { char hash[256] = {0}; char *tmp = (char *)str; assert(str); while ('\0' != *tmp) { hash[*tmp]++; tmp++; } while ('\0' != *str) { if (1 == hash[*str]) { break; } else str++; } return *str; } int main() { char arr[10] = "abcedabc"; int ret = find_first_appear_once(arr); printf("%c\n", ret); return 0; }
查找第一次只出现一次的字符
最新推荐文章于 2024-07-15 11:50:01 发布