寻找一个字符串中第一个只出现两次的字符
2017-07-20 17:52
253 查看
2.【附加题】–查找一个字符串中第一个只出现两次的字符。
比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
解法:
利用哈希表;由于ASCII表中一共存在256个字符;所以开辟一个256大小整型数组;将这个数组看做哈希表,将字符的ASCII值当做Key值作为数组下标,将key对应的数组元素的值作为value,先遍历一遍字符串,统计出字符串中每个字符出现的次数;再从字符串的首字符的ASCII码的下标开始遍历一遍哈希表,找出第一个value值为2的key;返回该key对应的字符;就是要求的第一次出现两次的字符;
比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
解法:
利用哈希表;由于ASCII表中一共存在256个字符;所以开辟一个256大小整型数组;将这个数组看做哈希表,将字符的ASCII值当做Key值作为数组下标,将key对应的数组元素的值作为value,先遍历一遍字符串,统计出字符串中每个字符出现的次数;再从字符串的首字符的ASCII码的下标开始遍历一遍哈希表,找出第一个value值为2的key;返回该key对应的字符;就是要求的第一次出现两次的字符;
#include<iostream> using namespace std; char FirstCharThatAppearsOnlyTwoTimes(char* str) { //1.如果字符串指针为空,返回‘\0’字符 if (str==NULL) { return '\0'; } //2.字符串指针不为空,字符串有内容 unsigned int HashTable[256]; for (int j=0;j<256;j++) { HashTable[j]=0; } char* HashKey=str; //统计字符串的字符对应的出现的次数; while (*(HashKey)!='\0') { HashTable[*HashKey]++; HashKey++; } HashKey=str; while (*HashKey!='\0') { if (HashTable[*HashKey]==2) { return *HashKey; } HashKey++; } //2.该字符串中没有只出现两次的字符; return '\0'; } int main() { //1.字符串指针为空 char* str1=NULL; cout<<"FirstCharThatAppearsOnlyTwoTimes:"<<FirstCharThatAppearsOnlyTwoTimes(str1)<<endl; //2.字符串指针不为空,即字符串有内容,且字符串中存在只出现两次字符 char* str2="abcdefabcdefabc"; cout<<"FirstCharThatAppearsOnlyTwoTimes:"<<FirstCharThatAppearsOnlyTwoTimes(str2)<<endl; //3.字符串指针不为空,但该字符串中没有出现只出现两次的字符; char* str3="abcdefabcdefabcdef"; cout<<"FirstCharThatAppearsOnlyTwoTimes:"<<FirstCharThatAppearsOnlyTwoTimes(str3)<<endl; return 0; }
相关文章推荐
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) /查找一个字符串中第一个只出现两次的字符
- day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符
- 【每日一题】查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符。
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符,要求时间复杂度为O(N)。-替换字符串中的空格为$$$。要求时间复杂度为O(N)
- 查找一个字符串中第一个只出现两次的字符
- 【每日一题】查找一个字符串中第一个只出现两次的字符。要求时间复杂度为O(N),空间复杂度为O(1)
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 查找字符个数--查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 【字符串】查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 查找一个字符串中第一个只出现两次的字符
- 查找一个字符串中第一个只出现两次的字符。要求 时o(n) 空o(1)
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 算法---在一个字符串中找到第一个只出现一次的字符
- c::在一个字符串中查找第一个只出现一次的字符
- AS3 面试题35 在一个字符串中找出第一个只出现一次的字符