查找第一次只出现一次的字符

来源:互联网 发布:希尔排序算法流程图 编辑:程序博客网 时间:2024/05/24 01:39

这是早些年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;}elsestr++;}return *str;}int main(){char arr[10] = "abcedabc";int ret = find_first_appear_once(arr);printf("%c\n", ret);return 0;}


1 0
原创粉丝点击