对字符串数组排序,使所有变位词都相邻(C++)
題目
編寫一個函數(shù),對字符串?dāng)?shù)組進(jìn)行排序,將所有變位詞排在相鄰的位置。
思路1:利用sort函數(shù)
首先要清楚什么是變位詞。變位詞就是組成的字母相同,但順序不一樣的單詞。 比如:live和evil就是一對變位詞。
在C++中,排序可以通過STL中的sort函數(shù)快速實現(xiàn)。sort可以將字符串?dāng)?shù)組中的字符串按字典序排序。雖然本題中的要求是按照變位詞的準(zhǔn)則來排序,我們還是可以調(diào)用sort函數(shù),不過要自己實現(xiàn)sort函數(shù)中的compare函數(shù)。
實現(xiàn)如下。
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; }復(fù)制代碼注釋:
① sort函數(shù)
函數(shù)形式:C++ sort(first_pointer, first_pointer+n, cmp)
參數(shù)解釋: 第一個參數(shù)是數(shù)組的首地址,一般寫上數(shù)組名就可以,因為數(shù)組名是一個指針常量。第二個參數(shù)相對較好理解,即首地址加上數(shù)組的長度n(代表尾地址的下一地址)。最后一個參數(shù)是比較函數(shù)的名稱(自定義函數(shù)cmp),這個比較函數(shù)可以不寫,即第三個參數(shù)可以缺省,這樣sort會默認(rèn)按數(shù)組升序排序。
函數(shù)拓展:cmp比較函數(shù)
//情況一:數(shù)組排列 int A[100]; bool cmp1(int a, int b)//int為數(shù)組數(shù)據(jù)類型 {return a > b;//降序排列//return a < b;//默認(rèn)的升序排列 } sort(A, A+100, cmp1);//情況二:結(jié)構(gòu)體排序 Student Stu[100]; bool cmp2(Student a, Student b) {return a.id > b.id;//按照學(xué)號降序排列//return a.id < b.id;//按照學(xué)號升序排列 } sort(Stu, Stu+100, cmp2);復(fù)制代碼② 注意事項
第一次看到本題,我的直接思路是利用sort函數(shù)實現(xiàn)降序,不定義cmp函數(shù),運行結(jié)果并不符合要求。這是因為,對string數(shù)組利用sort函數(shù)直接進(jìn)行降序排序,是“將字符串?dāng)?shù)組中的字符串按字典序排序”,string數(shù)組中單個string字符串本身并未得到排序,因此無法正確找到“變位詞”。
// 直接利用sort函數(shù)排序,運行結(jié)果有誤!! #include <iostream> #include <algorithm> #include <string> 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; }運行結(jié)果: // 可以看出以上string字符串均按照字典序排序 abc axyz bac fg gf yzax zyxa復(fù)制代碼思路2:哈希表排序
參考文獻(xiàn)
[1]?寫一個函數(shù)對字符串?dāng)?shù)組排序,使所有變位詞都相鄰
[2]?leetcode 相同字母組成的不同單詞歸為一類即所謂的變位詞
[3] 變位詞排序
[4] 變位詞排序
總結(jié)
以上是生活随笔為你收集整理的对字符串数组排序,使所有变位词都相邻(C++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python——type()、metac
- 下一篇: [原创分享] SocketCapture