去哪儿笔试题:寻找字符串数组中指定字符出现的字符串并排序
来源:互联网 发布:java反序列化漏洞工具 编辑:程序博客网 时间:2024/04/29 03:21
3
请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照"Coder"出现的次数递减排列,若两个串中"Coder"出现的次数相同,则保持他们在原数组中的位置关系。
给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符串。
测试样例:
["i am a coder","Coder Coder","Code"],3
返回:["Coder Coder","i am a coder"]
解题思路:
首先我们找数组每一个元素中是否有“code”字样出现,如果没有直接跳到下一个元素,如果有,我们则判断code字样后面剩余的字符串中是否还有code字样,并且统计字符串中code出现的次数,我们将出现code的字符串和相应code出现的次数合并在一起,存在pair类型中,加入到vector中,之后对vector元素利用sort进行排序,指定sort操作符重载函数即可。代码如下:
#include<iostream>#include<string>#include<vector>#include<map>#include<iterator>#include<stdlib.h>#include<algorithm>using namespace std;typedef pair<string, int> PAIR;vector<string> findCoder(vector<string> A, int n);bool cmp_by_value_less(const PAIR& l,const PAIR& r); void main(){vector<string> A;A.push_back("i am a coder");A.push_back("Coder Coder");A.push_back("Code");vector<string> b=findCoder(A,3);}bool cmp_by_value_less(const PAIR& l,const PAIR& r) { return l.second<r.second; } vector<string> findCoder(vector<string> A, int n) { size_t npos=-1; vector<string> res; if(A.size()!=n||A.size()<=0||n<=0) return res; vector<PAIR> vec; for(int i=0;i<n;i++) { string cur=A[i]; transform(cur.begin(), cur.end(), cur.begin(), toupper);//注释1 int found_num=0; while(cur.length()>=5) { int found=cur.find("CODER"); if(found==npos)<span style="font-family: arial, STHeiti, 'Microsoft YaHei', 宋体;">//注释2</span> break; else { found_num++; string temp(cur.begin()+found+5,cur.end()); cur=temp; } } if(found_num>0) { PAIR ele(A[i],found_num);vec.push_back(ele); } } sort(vec.begin(),vec.end(),cmp_by_value_less); //注释3 for(int i=0;i<vec.size();i++) { res.push_back(vec[i].first);//注释4 } return res; }注释1:
transform函数的作用是:将某操作应用于指定范围的每个元素。transform函数有两个重载版本:
transform(first,last,result,op);//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。
transform(first,last,result,op);//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。
因为string没有提供直接转换大小写的函数,只有通过char的转换大小写的toupper和STL的stransform来实现。
注释2:
npos是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type
npos表示string的结束位子,是string::type_size 类型的,也就是find()返回的类型,但是要记得生明哦!
npos表示string的结束位子,是string::type_size 类型的,也就是find()返回的类型,但是要记得生明哦!
注释3:
- template <class RandomAccessIterator, class Compare>
- void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
我们定义comp比较函数即可比较vector中的元素
注释4:
可以通过first,和second访问pair中的元素。更多相关内容在我的博客http://blog.csdn.net/sinat_24520925/article/details/47803641 有讲
0 0
- 去哪儿笔试题:寻找字符串数组中指定字符出现的字符串并排序
- 算法1:寻找字符串数组中指定字符出现的字符串并排序
- 去哪儿2015笔试题:寻找字符串的差异
- 去哪儿网C++笔试题--二分查找、最先出现两次的字符、每个字符串中的单词个数
- 去哪儿2017校园招聘笔试题——统计字符串中最先出现三次的字符
- 获取字符串中指定字符最后一次出现的位置
- 2015去哪儿网校园招聘笔试题:寻找字符串的差异
- 去除字符串中指定字符的方法
- 查找字符串中指定字符的个数
- 删除字符串中指定位置的字符
- 删除字符串中指定位置的字符
- 删除字符串中指定的字符
- 改变字符串中指定字符的颜色
- 删除字符串中指定的字符
- 删除字符串中指定的一些字符
- 改变字符串中指定字符的颜色
- 查找字符串中指定字符的位置
- 查找字符串中指定字符的位置:
- Android中启动线程来进行耗时操作
- hdoj 3336 Count the string
- Add Binary
- c++ Primer 第13章 拷贝控制
- apache HttpClient 3.X使用手册
- 去哪儿笔试题:寻找字符串数组中指定字符出现的字符串并排序
- iOS开发:标签视图控制器(UITabBarController)
- UDP广播
- CentOS没有相关命令的解决
- 关于ScrollView的getChildAt(int params)方法
- iOS系统 查看40位设备标识(UDID)
- 使用ANT编译项目报错 com.sun.image.codec.jpeg does not exist 解决方法
- lintcode-不同的路径-114
- Humble Numbers HDU杭电1058【动态规划】