您的位置:首页 > 其它

寻找一个字符串中第一个只出现两次的字符

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对应的字符;就是要求的第一次出现两次的字符;

#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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐