第一個只出現一次的字符(Hash)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章