#include <stdio.h>
#include <iostream>
using namespace std;
//第一次只出现一次的字符
//input: abaccdeff
//output: b
char FirstNotRepeatingChar1(char* pString);
char FirstNotRepeatingChar2(char* str);
int main()
{
char* str = "abaccdeff";
cout<<FirstNotRepeatingChar1(str)<<endl;
cout<<FirstNotRepeatingChar2(str)<<endl;
return 0;
}
//时间复杂度为O(n2)
char FirstNotRepeatingChar1(char* str)
{
int len = strlen(str);
for(int i=0; i<len-1; i++)
{
int j = i + 1;
for(; j<len; j++)
{
if(str[i] == str[j])
break;
}
if(j == len)
return str[i];
}
return '\0';
}
//时间复杂度度O(n),空间复杂度O(1)
char FirstNotRepeatingChar2(char* pString)
{
if(pString == NULL)
return '\0';
const int tableSize = 256;
unsigned int hashTable[tableSize];
for(int i=0; i<tableSize; i++)
{
hashTable[i] = 0;
}
char* pHashKey = pString;
while(*pHashKey != '\0')
{
hashTable[*pHashKey++] ++;
}
pHashKey = pString;
while(*pHashKey != '\0')
{
if(hashTable[*pHashKey] == 1)
return *pHashKey;
pHashKey ++;
}
return '\0';
}