第一个只出现一次的字符
来源:互联网 发布:什么直播软件最好 编辑:程序博客网 时间:2024/06/05 15:09
面试题35:第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'。
解析:最好的办法是用一个哈希表来存储字符-出现次数,用字符作为key,出现次数最为value。这样查找的过程为O(1),所以这个思路的时间复杂度主要在构造这个哈希表。在c中char类型的数据为2^8=256个,因此数组的大小为256。需要遍历两次数组才可以完成这个功能,第一遍构造这个哈希表,第二遍是找出第一个出现1次的字符。
代码如下:
char FirstNotRepeatingChar(const char* pString) { if ( pString == NULL ) return '\0'; unsigned int hashTable[256]; memset(hashTable, 0, sizeof(unsigned int)*256); //A const char* pStart = pString; while ( *pStart != '\0' ) hashTable[*(pStart++)]++; pStart = pString; while ( *pStart != '\0' ) { if( hashTable[(*pStart)] == 1 ) break; else pStart++; } if ( *pStart != '\0' ) return *pStart; else return '\0'; }
注:关于memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s
0 0
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 第一个只出现一次的字符
- 小窗口登录对于jquery—ajax重写
- window.showModalDigl()方法在本页面刷新
- 彻底理解position与anchorPoint
- thinkphp里面,如何给控制器传构造参数
- 506 - System Dependencies
- 第一个只出现一次的字符
- 对于shiro拦截器重写结合小窗口登录
- C3P0连接数据库
- pat 1065
- 开源集合项目
- 链表的常见操作
- 棋盘覆盖问题
- Eclipse最有用的10个快捷键
- 各种各样的client