題目:
給定乙個單詞集合 (沒有重複),找出其中所有的 單詞方塊 。
乙個單詞序列形成了乙個有效的單詞方塊的意思是指從第 k 行和第 k 列 (0 ≤ k < max(行數, 列數)) 來看都是相同的字串。
例如,單詞序列 ["ball","area","lead","lady"] 形成了乙個單詞方塊,因為每個單詞從水平方向看和從豎直方向看都是相同的。
b a l l
a r e a
l e a d
l a d y
注意:單詞個數大於等於 1 且不超過 500。
所有的單詞長度都相同。
單詞長度大於等於 1 且不超過 5。
每個單詞只包含小寫英文本母 a-z。
示例 1:
輸入:["area","lead","wall","lady","ball"]
輸出:[
[ "wall",
"area",
"lead",
"lady"
],[ "ball",
"area",
"lead",
"lady"]]
解釋:輸出包含兩個單詞方塊,輸出的順序不重要,只需要保證每個單詞方塊內的單詞順序正確即可。
示例 2:
輸入:["abat","baba","atan","atal"]
輸出:[
[ "baba",
"abat",
"baba",
"atan"
],[ "baba",
"abat",
"baba",
"atal"]]
解釋:輸出包含兩個單詞方塊,輸出的順序不重要,只需要保證每個單詞方塊內的單詞順序正確即可。
解答:開始直接暴力dfs妥妥的超時。正確做法是利用字首特性,即
如果我們知道結果中第乙個單詞,那麼下乙個單詞字首我們是知道的。
比如有[ball]
,我們知道單詞方塊是4x4
,換句話說每個單詞長度都為4
,其次下個單詞是a
字母開頭的。
假如我們找到乙個a
開頭長度為4
單詞,變成[ball, area]
,那麼第三個單詞的字首是le
長度為4
單詞,依次類推。
所以要先計算不同字首對應的單詞有哪些。
方法1:trie樹
方法2:map
我寫的是用map的,用乙個unordered_map> mp。
mp[str]是乙個int集合,其中每個int都是字首為str的單詞索引。
**:
1class
solution ;}
7 vectorstring>>res;
8 limit=words[0
].size();
9 vectorcur;
10for(int i=0;ii)16}
17for(int i=0;ii)
22return
res;23}
2425
void dfs(vectorstring>>& res,vector& words,vector&cur)cout<
if(cur.size()>=limit)
34res.emplace_back(move(cur_res));
35return;36
}37string prefix="";//
先算下乙個單詞需要滿足的字首
LeetCode 422 有效的單詞方塊
給你乙個單詞序列,判斷其是否形成了乙個有效的單詞方塊。有效的單詞方塊是指此由單詞序列組成的文字方塊的 第 k 行 和 第 k 列 0 k max 行數,列數 所顯示的字串完全相同。注意 給定的單詞數大於等於 1 且不超過 500。單詞長度大於等於 1 且不超過 500。每個單詞只包含小寫英文本母 a...
4 25學習筆記
見鏈結的pandas學習。我的學習心得 python的基本元素 數字,字串和變數 python內的資料型別有 布林型 boolean true false 整型 integer 浮點型 float 可用科學計數表示法 ex.1.0e3 1000.0 字串 string 字元組成的陣列 2.1 變數 ...
linux 學習筆記 4 25
linux檔案系統目錄結構簡介 對於linux來講它的樹型結構與windows不同,windows可以有多個分割槽,每個分割槽都有根,但linux 只有乙個根,其他的所有檔案 目錄或硬碟分割槽 軟盤 光碟 u 盤都必須mount 掛載 到linux 根下的乙個目錄中才能被訪問和使用.bin用於存放普...