#include<iostream>
#include<stdlib.h>
using namespace std;
//題目要求:在字符串中找出第一個只出現一次的字符,如輸入"abaccdeff",則輸出b。
//傳統方法的時間複雜度爲o(n^2)
//現在我們要用o(n)的方法來解決這個問題
//運用hash表,用key代表字符,value代表字符出現的次數
char Firstnotrepeatingchar(char *pString){
if(pString == NULL) return '\0';
const int tableSize = 256;//2的8次方,主要是一個字符佔8個字
unsigned int hashTable[tableSize];
for(unsigned 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';
}
int main(){
char *str = "abscdadweefg";
char result = Firstnotrepeatingchar(str);
cout<<result<<endl;
return 1;
}
第一個只出現一次的字符(Hash)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.