您的位置:首页 > 职场人生

面试100题-4

2013-01-15 09:56 176 查看
题目:在一个字符串中找到第一个只出现一次的字符,如输入abaccdeff,则输出b
(Google 2006)

分析:如果只是从头到尾的比较每个字符以及它后面到末尾的字符,这样时间复杂度会达到
O(n2),这样的代码肯定不行,应该继续寻找优化的算法

因为字符串是由一个个字符组成的,而每一个字符在ASCII表中都对应自己的ASCII值,这样
就转化成了一个hash表,其中每个字符是key,每个字符在字符串中出现的次数为value
然后问题转化成了,在这个hash表中寻找出value是1的key,如果有多个满足条件的字符,则
输出第一个
因为hash表按照字符顺序来,所以直接遍历寻找,找到的第一个即为题目要求

写出实现这个功能的函数即可,前面加上必要的注释,体现出良好的代码习惯和风格

/*
//Function:Find the first character which appears only one time in a string
//Input: the string
//Output:the character
*/

char FindFirstChar(char * str) {
if(str == NULL)
return 0;

const int size = 256;
int hashtable[size];

for(int i=0; i<size; i++)
hashtable[i] = 0;

char * ch = str;
while(ch != '\0') {
hashtable[*(ch++)]++;
}

char * result = str;
while(result != '\0') {
if(hashtable[*result] == 1)
return *result
result++;
}

return 0;
}


总结:1.要熟悉基本的数据类型占的字节,位数,分不同的32位和64位机器
2.在数据结构方面要联想到容器,哈希表,映射,计数等这些关键的点
3.实现功能时要考虑到输入和输出的要求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 面试