**程式設計珠璣(五):尋找變位詞
今天的問題是關於變位詞的,首先來看問題的描述:
給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。
比如,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 #includesort程式#include
#define wordmax 100
int charcomp(const
void *x, const
void *y)
intmain()
return0;
}
排序程式直接使用系統的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 它們...