面试题35:第一个只出现一次的字符

来源:互联网 发布:制作特效视频软件 编辑:程序博客网 时间:2024/06/05 07:15
/*题目:在字符串中找出第一个只出现一次的字符,如输入"abaccdeff",则输出'b'。*/#include <iostream>using namespace std;//时间复杂度为O(n)空间复杂度为O(1)(利用一个固定大小的数组)char FirstNotReapeatChar(char *pString){    if(pString == NULL)    return '\0';    const unsigned int tablesize = 256;    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';}//================测试代码==============void Test(char *pString, char expected){    if(FirstNotReapeatChar(pString) == expected)    cout << "Passed!" << endl;    else    cout << "Failed!" << endl;}int main(){    //常规输入测试,字符串中存在只出现一次的字符    Test("google", 'l');    //常规输入测试,不存在只出现一次的字符    Test("aabccdbd", '\0');    //常规输入册是,字符串中所有字符都只出现一次    Test("abcdefg", 'a');   // 鲁棒性测试,输入NULL    Test(NULL, '\0');    return 0;}/*注:如果需要判断多个字符是不是在某个字符串里出现或者统计多个字符在某个字符串中出现的次数,可以考虑基于数组创建一个简单的哈希表。这样可以用很小的空间消耗换来时间效率的提升。*/

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ipad卡住了没反应怎么办 苹果7下不了软件怎么办 苹果手机开机密码忘了怎么办 苹果开机密码忘了怎么办 我的ipad很卡怎么办 6s升级后卡顿严重怎么办 软件升级后手机卡顿怎么办 ps通道抠图模糊怎么办 电脑锁屏死机了怎么办 ipad电源键坏了怎么办 华为平板死机黑屏了怎么办 苹果4s锁屏键坏了怎么办 平板电脑密码锁忘记密码怎么办 苹果平板电脑密码锁忘记密码怎么办 平板电脑密码锁密码锁死怎么办 小米平板黑屏按键亮怎么办 小米平板黑屏没反应怎么办 小米平板一刷黑屏了怎么办 小米4卡死了怎么办啊 苹果平板电脑开不了机怎么办 ipad开不了机怎么办都是黑屏 手机突然黑屏了死机状态怎么办 苹果平板死机不能重启怎么办 韩众平板死机了怎么办 苹果平板输入密码多次停用怎么办 ld密码被停用了怎么办 档案被自己丢了怎么办 手机在厂里丢了怎么办 在厂里借工具丢了怎么办 导出的考勤没有姓名怎么办 退休时档案丢了怎么办 职工与企业没有劳资怎么办 去大学报道的档案袋丢失怎么办 档案入学毕业年份写错怎么办 从事业单位辞职后人事档案怎么办 老师辞职不给批怎么办 公办教师去私立学校档案怎么办 辞职后档案不给怎么办 档案不小心拆了怎么办 退休职工档案年龄有涂改怎么办 养老金原始档案找不到怎么办退休