假設你有一個單詞列表:我們構建自己{'c'=>'a', 'a'=>'n', 't'=>'t' }
通過任意映射查找列表中相同的單詞
['cat', 'ant', 'bro', 'gro']
使用一些隨意的映射,我們可以映射「貓」到「蟻族」,同樣我們可以找到一些任意的映射來將'bro'轉換爲'gro'。
這是找到相同的單詞的想法。我寫如果它們是等價的通過映射我在飛行構造比較兩個詞語,並檢查一個函數:
def compareWords(w1, w2):
mapping = {}
for i in xrange(0, len(w1)):
if w1[i] in map:
if mapping[w1[i]] == w2[i]:
continue
else:
return False
else:
mapping[w1[i]] = w2[i]
return True
示例輸入:
['cat', 'ant', 'bro', 'gro']
輸出示例:
[['cat','ant'], ['bro', 'gro']]
在列表中的每一對單詞上使用此函數返回O(n^2)中運行的等價單詞列表的輸出列表,因爲每對將需要t o比較。我沒有實現這個部分,我在輸入列表中使用了上面的這個方法,並且生成了輸出列表,因爲這個方法不是我期待的有效比較。有沒有辦法在O(n)時間在這個輸入列表中找到相同的單詞?
進一步解釋: 如果我有一個單詞列表,我想找到所有的「等價物」的話,我需要做的檢查,在雙字。如果我比較的單詞中的所有字母都是唯一的,那麼如果第二個單詞中的所有字母都是唯一的,則列表中的另一個單詞只與第一個單詞相同。所以如果xyz在列表中,abc可以映射到xyz。如果xyz在列表中,xyz可以映射到pqr。鑑於此,abc,xyz和pqr都是等效的。這是我正在尋找的那種分組。
你應該生成'map'還是預定義的?你爲什麼將它重新初始化爲一個空的字典。也可以把它稱爲map,因爲map與內置函數衝突。 – Bahrom
我不關注算法的輸入和輸出。你正在尋找一些映射,根據它你可以映射任何單詞到任何單詞?如果它不必是最小的:'return {a,...,z} X {a,...,z}'。如果它必須最小化,那麼你的算法是不正確的。 – amit
請提供一個輸入和輸出的例子 – niklas