第十七题(找出字符串中第一个只出现一次的字符)

来源:互联网 发布:阿里云服务器到期续费 编辑:程序博客网 时间:2024/06/06 05:33

题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

o(n^2)时间复杂度的方法比较简单,遍历每一个字符,将其和后面的每个字符进行比较,若没有相同的,那么这个字符就是要寻找的字符。

要实现更低阶的时间复杂度,我们可以采用空间换时间的思想,采用哈希表解决这个问题。利用一次循环统计每个字符出现的次数,然后找出出现次数为1的字符即可,哈希表的键为字符,值为字符对应的出现次数。

这里给出分别用stl的unordered_map和自定义哈希表的实现的代码:

#include<unordered_map>#include<iostream>using namespace std;namespace MS100P_17{//采用stl的unordered_mapunordered_map<char,int>charMap;char firstSingle(char* str){int length = strlen(str);for (int i = 0; i < length; i++)charMap[str[i]]++;for (int i = 0; i < length;i++)if (charMap[str[i]] == 1)return str[i];return '\0';//未找到}char firstSingle2(char* str){int hash[256];memset(hash, 0, 256*sizeof(int));for (int i = 0; i < strlen(str); i++)hash[str[i]]++;for (int i = 0; i < strlen(str);i++)if (hash[str[i]] == 1)return str[i];return '\0';//未找到}void test(){char str[] = "abaccdeff";cout << firstSingle(str) << endl;cout << firstSingle2(str) << endl;}}int _tmain(int argc, _TCHAR* argv[]){MS100P_17::test();return 0;}


0 0
原创粉丝点击