尋找變位詞

2021-06-26 07:54:21 字數 1729 閱讀 8213

**程式設計珠璣(五):尋找變位詞

今天的問題是關於變位詞的,首先來看問題的描述:

給定一本英語單詞詞典,請找出所有的變位詞集。

所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。

比如,pots、stop、tops就是變位詞。

將變位詞程式組織成三段式的「管道」結構,前乙個程式的輸出檔案將是下乙個程式的輸入檔案。三段程式如下:

sign:讀入字典檔案,對單詞進行「簽名」操作

sort:輸入簽名後的單詞檔案,對檔案進行排序

squash:將同乙個變位詞類中的各個單詞放到同一行中

下面是對具有六個單詞的詞典進行操作的流程:

pans                                  anps  pans                                  anps  pans

pots                                  opst   pots                                  anps  snap                                 pans  snap

opt           --》 簽名  --》     opt    opt             --》 排序  --》   opt    opt              --》擠壓 --》        opt

snap                                  anps  snap                                  opst   pots                                 pots  stop   tops

stop                                  opst   stop                                  opst   stop

tops                                  opst   tops                                  opst   tops

sign程式

**如下:

#include #include 

#include

#define wordmax 100

int charcomp(const

void *x, const

void *y)

intmain()

return0;

}

sort程式

排序程式直接使用系統的sort程式。

squash程式

擠壓程式**如下:

#include #include 

#include

#define wordmax 100

intmain()

printf("\n

");return0;

}

將以上程式編譯成可執行程式後,放到同一目錄下(同時將測試測試字典檔案拷貝到該目錄)。

命令列下(windows下,執行cmd)執行如下命令執行程式:

sign < dictionary | sort | squash >gramlist.txt

我在網上找了乙個一萬五千個的單詞檔案,放在這裡供測試:dictionar

變位詞排序

請編寫乙個方法,對乙個字串陣列進行排序,將所有變位詞合併,保留其字典序最小的乙個串。這裡的變位詞指變換其字母順序所構成的新的詞或短語。例如 和 integral 就是變位詞。給定乙個string的陣列str和陣列大小int n,請返回排序合併後的陣列。保證字串串長小於等於20,陣列大小小於等於300...

變位詞問題

問題描述 給定乙個英語詞典,找出其中的所有變位詞集合。例如,pots stop 和 tops 互為變位詞,因為每乙個單詞都可以通過改變其他單詞中的字母的順序來得到。問題解析 變位詞具有相同的長度,相同的字元,唯一的區別就是這些相同的字元按照不同的順序排列成不同的字串而已。如果有一種方法唯一標識這些相...

演算法 變位詞

如果兩個單詞的組成字母完全相同,只是字母的排列順序不一樣,則它們就是變位詞,兩個單詞相同也被認為是變位詞。如tea 與eat nic 與cin,ddc與dcd,abc與abc 等。你的任務就是判斷它們是否是變位詞。第一行乙個n,表示下面有n行測試資料。每行測試資料報括兩個單詞,如tea eat 它們...