题目描述:
输入字符串:asdfasdfo
输出:o
思路方法:我们利用哈希表来解决这个问题,我们遍历字符串,只要出现的字符就给哈希表里相应的位置+1,最后我们只用在哈希表里找到第一个是1的元素,就找到了字符串中第一次只出现一次的字符
下面试完整代码:
#include <iostream>
#include <string>
using namespace std;
//哈希表的大小,最多256个字符
#define tableSize 256
class solution
{
public:
char FindFirstAppearOnce(char* pStr)
{
//非法输入的判断
if(pStr == NULL)
return 0;
int HastTable[tableSize];
//给哈希表进行初始化,此时每个字符的出现次数为0;
int i = 0;
for(;i < tableSize;i++)
HashTable[i] = 0;
char* pHashKey = pStr;
//遍历字符串向哈希表中写入每个字符出现的次数
while(*(pHashKey) != '\0')
HashTable[*(pHashKey)++]++;
pHashKey = pStr;
//再次遍历数组,在哈希表中找到第一个值为1的元素,就是字符串中第一次只出现一次的字符
while(*pHashKey != '\0'){
if(HashTable[*pHashKey] == 1)
return *pHashKey;
pHashKey++;
}
//走到这,就说明没有只出现了一次的字符
return 0;
}
};
int main()
{
solution s;
char* pStr = "asdfasdfo";
char p1 = s.FindFirstAppearOnce(pStr);
if(p1 == NULL){
cout<<"-1"<<endl;
}else
cout<<p1<<endl;
return 0;
}