去哪儿网的一道面试题:找出字符串出现最多的字符
2017-07-29 10:03
246 查看
问题:
给定一个字符串,要求把字符串中出现次数最多的字符打印出来。
分析:
不置可否,肯定要统计每一个字符出现的次数。然后依据字符出现次数的大小打印出出现次数最多的字符。另外须要注意的是出现次数最多的字符个数可能不止一个。
解决方式:
1 最easy想到的就是建立一个map。字符作为key,初始化次数cnt为0。每次遍历数组中的一个元素的时候,假设能在map中查到该字符,那么该map元素的cnt++。假设没有找到该元素,那么在map中插入该元素,而且cnt++。这种话遍历完整个数组的时间复杂度是O(n*logn)。
然后再遍历整个map找到元素最大的,总之这种方法效率不是非常高
2 利用哈希表的思想 或者说是计数排序的思想。ASCII码中字符的个数不超过256,我们就创建一个大小为256的数组,然后遍历数组。直接将字符相应的ASCII码作为数组的索引,索引相应的计数次数+1.这样统计每一个字符出现的次数的时间复杂度就是是O(n)了。
然后的就简单了,遍历计数数组,遇到跟当前出现次数一样大的就压栈,假设遇到更大的就把之前的出栈。再把当前最大的压栈,如此就可以。
3 程序实现:
4 感想
假设想找个好工作。事先做好准备真的非常重要的,那些大的互联网公司一般不怎么考察你的语言,而是考察你的思维应变能力,知识面广度,某一面的深度。算法差点儿是每一个公司都要文的,有时候算法掌握的好坏能够说决定你能否拿到offer。有空还是多看看经典的算法数据《算法导论》,《数据结构与算法分析》。另外针对公司面试的详细准备下,看看什么《面试宝典》。《面试金典》,《剑指offer》之类的。里面的面试题目都非常经典,非常多公司的面试题要么是出自当中,要么就是略微改造一下。
给定一个字符串,要求把字符串中出现次数最多的字符打印出来。
分析:
不置可否,肯定要统计每一个字符出现的次数。然后依据字符出现次数的大小打印出出现次数最多的字符。另外须要注意的是出现次数最多的字符个数可能不止一个。
解决方式:
1 最easy想到的就是建立一个map。字符作为key,初始化次数cnt为0。每次遍历数组中的一个元素的时候,假设能在map中查到该字符,那么该map元素的cnt++。假设没有找到该元素,那么在map中插入该元素,而且cnt++。这种话遍历完整个数组的时间复杂度是O(n*logn)。
然后再遍历整个map找到元素最大的,总之这种方法效率不是非常高
2 利用哈希表的思想 或者说是计数排序的思想。ASCII码中字符的个数不超过256,我们就创建一个大小为256的数组,然后遍历数组。直接将字符相应的ASCII码作为数组的索引,索引相应的计数次数+1.这样统计每一个字符出现的次数的时间复杂度就是是O(n)了。
然后的就简单了,遍历计数数组,遇到跟当前出现次数一样大的就压栈,假设遇到更大的就把之前的出栈。再把当前最大的压栈,如此就可以。
3 程序实现:
#include <iostream> #include <vector> using namespace std; void findMaxChar(char* str); void main() { char* str = "I'm a good boy!!!"; findMaxChar(str); } void findMaxChar(char* str) { int strn[256] = {0}; char *p = str; while(*p != '\0') { strn[*p]++; p++; } vector<char> vec; int nMax=-1; for(int i=0;i<256;i++) { if(strn[i]==nMax) vec.push_back(i); if(strn[i]>nMax) { while(!vec.empty()) vec.pop_back(); vec.push_back(i); nMax = strn[i]; } } vector<char>::iterator iter; for(iter=vec.begin();iter<vec.end();iter++) cout<<*iter<<endl; }
4 感想
假设想找个好工作。事先做好准备真的非常重要的,那些大的互联网公司一般不怎么考察你的语言,而是考察你的思维应变能力,知识面广度,某一面的深度。算法差点儿是每一个公司都要文的,有时候算法掌握的好坏能够说决定你能否拿到offer。有空还是多看看经典的算法数据《算法导论》,《数据结构与算法分析》。另外针对公司面试的详细准备下,看看什么《面试宝典》。《面试金典》,《剑指offer》之类的。里面的面试题目都非常经典,非常多公司的面试题要么是出自当中,要么就是略微改造一下。
相关文章推荐
- 去哪儿网的一道面试题:找出字符串出现最多的字符
- C/C+面试题一:找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)
- c#面试题:找出字符串中出现次数最多的字符及出现次数
- 求出字符串中出现次数最多字符--一道面试题
- 面试题:1.清空字符串前后的空格;2.找出出现最多的字符
- 易车网的一道面试题:JS计算字符串中出现次数最多的字符和出现的次数
- 找出给定字符串中出现最多的字符和次数
- php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。
- JS实现找出字符串中出现最多的字符和次数
- 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)
- 面试题:字符串出现最多的字符和个数
- 给出一个字符串(不带空格),找出字符串当中出现次数最多的字符?
- 找出字符串中第一个出现次数最多的字符
- c语言编程----找出字符串中出现次数最多的字符
- [java] 找出字符串中出现最多的字符和出现的次数
- 给定一个字符串找出出现次数最多的字符
- AS3 面试题35 在一个字符串中找出第一个只出现一次的字符
- Js实现找出字符串中出现次数最多的字符
- 数组去重;字符串按千位分割;找出出现最多的字符
- c++面试题之 找出字符串中第一个只出现一次的字符