写一个函数对字符串数组排序,使所有变位词都相邻
2015-04-22 22:50
253 查看
题目
写一个函数对字符串数组排序,使得所有的变位词都相邻。解答
首先,要弄清楚什么是变位词。变位词就是组成的字母相同,但顺序不一样的单词。 比如说:live和evil就是一对变位词。OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了。它要求我们在排序的过程中,按照变位词的准则来排序。 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数。 一般情况下我们如果要排序一个长度为n的数组A,我们可以这样调用sort:sort(A, A+n);
但如果我们有一个数组P,里面每个元素都是一个结构体:person,我们想按照person 这个结构体中年龄age来排序,这时候我们就需要自己写一个对比函数cmp:
bool cmp(person p1, person p2){ return p1.age < p2.age; }
然后这样调用sort函数:
sort(P, P+n, cmp);
OK,回到我们的题目,我们的对比函数需要将两个串先按字典序排序,然后再比较, 这样一来,变位词经过字典序排序后就是一样的了。当调用sort函数时将会被排在一起。
代码如下:
#include <iostream> #include <algorithm> using namespace std; bool cmp(string s1, string s2){ sort(s1.begin(), s1.end()); sort(s2.begin(),s2.end()); return s1 < s2; } int main(){ string s[] = { "axyz", "abc", "yzax", "bac", "zyxa", "fg", "gf" }; sort(s, s+7, cmp); for(int i=0; i<7; ++i) cout<<s[i]<<endl; return 0; }
相关文章推荐
- 程序员面试金典: 9.11 排序与查找 11.1编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。
- 【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置
- 编写一个方法,对字符串进行排序,将所有变位词排在相邻的位置
- 对字符串数组进行排序,将所有变位词排在相邻的位置。
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 写一个函数对字符串数组进行排序,排序的规则是根据每个字符串中……
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 写一个函数排序整个字符串数组
- 对字符串数组进行排序,将所有的变位词排在相邻的位置
- 创建一个字符串数组,总共5个元素,每个元素最多保存30个字符,写一个函数排序整个数组。
- 编写一个js函数求一个字符串数组按字符串中各字母出现次数多少的重新排序
- 9.11排序与查找(二)——对字符串数组进行排序,将全部的变位词排在相邻的位置
- 创建一个字符串数组,总共5个元素,每个元素最多保存30个字符,写一个函数排序整个数组。
- 9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置
- 我想用strcmp() 作为比较函数, 调用qsort() 对一个字符串数组排序, 但是不行。
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 写一个函数,输出字符串中字符的所有排序。(比如:abc acb bac bca cab cba )
- 数组a中每个元素包含两个值第一个是整型第二个是字符串写一个sort函数以第一个值为键按从小到大排序
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 一个数组中存储有且仅有大写和小写字母,编写一个函数对数组内的字母重新排列,让小写字母在所有大写字母之前