算法之字符串选出第一个只出现一次的字符
2016-10-14 13:35
218 查看
好久没写了...最近打算恢复博客,尽力而为吧。
给出一串字符串,返回第一个只出现一次的字符。
如:输入:aabbccddeff
返回:f
最先想到了就是将每个字符都与所有字符对比一遍,不存在相同的则输出,时间复杂度显然是o(n2)。
当时看到这道谷歌的面试题时,我想到前几天看到用异或比较二进制从而解决两个对象是否相同的问题。但异或只有偶数个相同的值才能得0,奇数个相同的值得他本身,在这道题中目前没有好的思路。题底下有个评论提供了一个很好的思路。用哈希表的思路存储这个字符串。而且哈希表的构造很简单,键仅仅是字符对应的ASCII码值,值对应该字符出现的次数。第一次遍历字符串将每个字符的ASCII码和其出现的此处存储在表中,第二次遍历哈希表第一个值为1的就是第一个只出现一次的字符,代码如下:
游戏之路任重而道远,吾将上下而求索。
给出一串字符串,返回第一个只出现一次的字符。
如:输入:aabbccddeff
返回:f
最先想到了就是将每个字符都与所有字符对比一遍,不存在相同的则输出,时间复杂度显然是o(n2)。
当时看到这道谷歌的面试题时,我想到前几天看到用异或比较二进制从而解决两个对象是否相同的问题。但异或只有偶数个相同的值才能得0,奇数个相同的值得他本身,在这道题中目前没有好的思路。题底下有个评论提供了一个很好的思路。用哈希表的思路存储这个字符串。而且哈希表的构造很简单,键仅仅是字符对应的ASCII码值,值对应该字符出现的次数。第一次遍历字符串将每个字符的ASCII码和其出现的此处存储在表中,第二次遍历哈希表第一个值为1的就是第一个只出现一次的字符,代码如下:
<span style="font-size:18px;">#include<iostream> char FindFirstCharNotRepeated(char *newString) { const int hashLength = 256; int hashTable[hashLength]; //初始化简单的哈希表(键:字母的ASCII值,值:重复次数) for (int i = 0; i < hashLength; i++) { hashTable[i] = 0; } //将数组首地址赋给指针newChar char *newChar = newString; //第一次遍历字符串 while (*newChar != '\0') { hashTable[*(newChar++)]++; } newChar = newString; //第二次遍历字符串 while (*newChar != '\0') { if (hashTable[*newChar] == 1) { return *newChar; } newChar++; } return '0'; } int main() { std::cout << "Please input a string:"; const int maxStringLength = 100; char target[maxStringLength]; std::cin >> target; std::cout << "First Not Repeated Char:"; std::cout << FindFirstCharNotRepeated(target) << std::endl; return 0; }</span>
游戏之路任重而道远,吾将上下而求索。
相关文章推荐
- 微软算法100道题-----:在一个字符串中找到第一个只出现一次的字符
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 每天学习一算法系列(17)(在一个字符串中找到第一个只出现一次的字符)
- 数据结构——算法之(007)(在一个字符串中找到第一个只出现一次的字符)
- 算法学习七----在一个字符串中找到第一个只出现一次的字符
- 算法--06谷歌面试:字符串中第一个只出现一次的字符(Java实现)
- 微软算法100题17 字符串中找到第一个只出现一次的字符
- 算法---在一个字符串中找到第一个只出现一次的字符
- 算法习题17:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 算法十二:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 每日一道算法题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
- 第5题 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 【100题】找出一个字符串中第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 两个字符串hash问题:检查两个单词是否互为变位词和在一个字符串中第一个只出现一次的字符
- 查找字符串中第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。