日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

对字符串数组排序,使所有变位词都相邻(C++)

發(fā)布時間:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对字符串数组排序,使所有变位词都相邻(C++) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目

編寫一個函數(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)如下。

#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; }復(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。