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

考研的时候学习过哈希函数,但这只是书本上的知识,简单的理解,从来没用过,也不知道怎么用,直到学了第一堂算法课,原来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 ' ';

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值