对字符串数组进行排序,将所有变位词排在相邻的位置。
2014-11-18 10:36
706 查看
题目:对字符串数组进行排序,将所有变位词排在相邻的位置。变位词就是组成的字母相同,但顺序不一样的单词。 比如说:live和evil就是一对变位词。
提示:题目不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了。它要求我们在排序的过程中,按照变位词的准则来排序。 这种情况下,可以调用sort函数,但要自己写一个对比函数。变位词最重要的特点是字符经过字典序排序后就是一样的。
不使用STL自带的函数sort,也可以实现:
提示:题目不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了。它要求我们在排序的过程中,按照变位词的准则来排序。 这种情况下,可以调用sort函数,但要自己写一个对比函数。变位词最重要的特点是字符经过字典序排序后就是一样的。
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; bool compare(string s1, string s2){ <span style="white-space:pre"> </span>transform(s1.begin(),s1.end(),s1.begin(),tolower); transform(s2.begin(),s2.end(),s2.begin(),tolower); sort(&s1[0], &s1[0]+s1.length()); sort(&s2[0], &s2[0]+s2.length()); return s1 < s2; } void AnagramSort(vector<string> &s) { <span style="white-space:pre"> </span>if(s.empty() ) <span style="white-space:pre"> </span>return; <span style="white-space:pre"> </span>sort(s.begin(),s.end(),compare); }
不使用STL自带的函数sort,也可以实现:
//对比函数,a<b 返回-1 , a>b 返回1 , a==b 返回0 int Compare(string a,string b) { int res; int ia=0,ib=0,lena=a.size(),lenb=b.size(); while(ia<lena && ib<lenb && a[ia]==b[ib]) { ia++; ib++; } if(ia<lena && ib<lenb) { if(a[ia]<b[ib]) return -1; if(a[ia]>b[ib]) return 1; } if(ia<lena) return 1; if(ib<lenb) return -1; return 0; } //输入一个字符串,返回其按照元素字典排序组成的字符串,大小写不敏感 string AnagramToStr(string str) { //先把大写字母转成小写 int len=str.size(); for(int i=0;i<len;i++) if(str[i]>='A' && str[i]<='Z') str[i]+=32; for(int i=0;i<=len-2;i++) { for(int j=0;j<=len-2-i;j++) { if(str[j]>str[j+1]) { char tmp=str[j]; str[j]=str[j+1]; str[j+1]=tmp; } } } return str; } //排序函数 void myAnagramSort(vector<string> &s) { if(s.empty()) return; int len=s.size(); for(int i=0;i<=len-2;i++) { for(int j=0;j<=len-2-i;j++) { if(Compare(AnagramToStr(s[j]),AnagramToStr(s[j+1]))>0) { string tmp=s[j]; s[j]=s[j+1]; s[j+1]=tmp; } } } }
相关文章推荐
- 【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置
- 程序员面试金典: 9.11 排序与查找 11.1编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。
- 9.11排序与查找(二)——对字符串数组进行排序,将全部的变位词排在相邻的位置
- 对字符串数组进行排序,将所有的变位词排在相邻的位置
- 9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置
- 编写一个方法,对字符串进行排序,将所有变位词排在相邻的位置
- 写一个函数对字符串数组排序,使所有变位词都相邻
- 对字符串数组进行排序,将变位词排在相邻位置
- 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
- 【php】将php中的数组元祖按照字符串长度进行排序
- 字符串数组所有排列,找指定串位置
- 用指针数组对字符串进行排序
- 对扑克牌字符串数组进行排序
- java代码-----String数组进行排序。是英文的字符串
- 使用JavaScript完成一个对字符串数组进行排序的小程序
- 写一个函数对字符串数组进行排序,排序的规则是根据每个字符串中……
- 用TreeSet对指定字符串数组内容进行排序(1)
- 找出字符串数组中的等于某字符串的所有索引位置
- 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序
- 两个数组 [n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。