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

考研的时候学习过哈希函数,但这只是书本上的知识,简单的理解,从来没用过,也不知道怎么用,直到学了第一堂算法课,原来hash表可以用数组模拟,统计数字或字符出现的次数。


代码如下:

int CHash::getStuNum(int* data, int len, int score){

if(data == NULL || len <= 0 || score < 0 || score > MAX_SCORE){

return ERROR;

}

//count each score 

int *scoreMap = new int[MAX_SCORE];

for(int i = 0; i < MAX_SCORE; i++){

scoreMap[i] = 0;

}

 

for(int i = 0; i < len; i ++){

scoreMap[data[i]] ++;//关键字映射到scoreMap中,关键字每出现一次,对应的的scoreMap[data[i]]加一;

}

 

int result = scoreMap[score];

delete[] scoreMap;

 

return result;

}

 //统计字符出现的频率,本题是求第一个只出现一次的字符

char CHash::getFirstChar(char *str){

if(str == NULL){

return ' ';

}

 

const int CHAR_NUM = 256;

int *charMap = new int[CHAR_NUM];     //assic码0-255;

for(int i = 0; i < CHAR_NUM; i++){

charMap[i] = 0;

}

char *p = str;

while( *p != '\0'){

charMap[*p] ++;      //字符隐式转换成整形;

p++;

}

 

p = str;

while( *p != '\0'){

if(charMap[*p] == 1){

return *p;

}

p++;

}

 

delete[] charMap;

 

return ' ';

}


发布了26 篇原创文章 · 获赞 7 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章