找出n个字符串中出现次数最多的字符串(创新工场)
2015-09-16 17:16
302 查看
C/C++:
char* find(char **data,int n);
说明:
1. data是字符串数组,n是数组中字符串的个数,返回值为出现次数最多的字符串。
2. 若结果有多个,返回任意一个即可
3. 不得使用任何库函数/API,如需使用类似功能, 请自行实现
4. 算法效率尽可能高,尽量少的使用内存空间
5. 必须要有代码注释和算法说明。
例如:data里面的数据是{“paper”,”cup”,”book”,”cup”,”pen”,”book”}。n = 6。返回结果为”cup”或”book”。
char* find(char **data,int n);
说明:
1. data是字符串数组,n是数组中字符串的个数,返回值为出现次数最多的字符串。
2. 若结果有多个,返回任意一个即可
3. 不得使用任何库函数/API,如需使用类似功能, 请自行实现
4. 算法效率尽可能高,尽量少的使用内存空间
5. 必须要有代码注释和算法说明。
例如:data里面的数据是{“paper”,”cup”,”book”,”cup”,”pen”,”book”}。n = 6。返回结果为”cup”或”book”。
#include<iostream> #include<string> #include<assert.h> #include<map> using namespace std; char *strcpy(char *p,const string temp) { int i=0,k=0; while(temp[i]) p[k++]=temp[i++]; p[k]='\0'; return p; } char* find(char **data,int n) { assert(*data!=NULL||n>0); map<string,int>mvc; int i,Max=0x80000000; string temp; char*p=new char[100]; for(i=0;i<n;i++) mvc[data[i]]++; map<string,int>::iterator it; for(it=mvc.begin();it!=mvc.end();it++) { if(it->second>Max) { Max=it->second; temp=it->first; } } return strcpy(p,temp); //return const_cast<char *>(temp.c_str()); } int main() { char *name[6]={"paper","cup","book","cup","pen","book"}; string temp=find(name,6); cout<<temp<<endl; }
相关文章推荐
- Android使用线程更新UI----Thread、Handler、Looper、TimerTask等
- readonly时禁用删除键,readonly按删除键后页面后退解决方案
- C++类成员的初始化
- CentOS NTP服务器
- session生命周期
- 运用ocropy时报numpy.dot() fails when using keyword argument "out"的错误
- linux sort 命令详解
- java 命令设计模式
- 自定义可控带跑马灯效果的TextView
- JSP九大内置对象
- java 获取当前系统时间
- Android NDK开发之JNI基础知识
- iphone跬步之--NSBundle
- 从自签名证书导出pfx和cer证书
- mysql 安装配置
- maven 安装配置
- CString/string/int转化
- 红黑树c源码实现与剖析
- xcode删除main.Storyboard 保持工程干净 需要注意事项
- String、Calendar、Date时间类型的相互转换