425 單詞方塊

2022-05-08 22:03:11 字數 1954 閱讀 2738

題目:

給定乙個單詞集合 (沒有重複),找出其中所有的 單詞方塊 。

乙個單詞序列形成了乙個有效的單詞方塊的意思是指從第 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的單詞索引。

**:

1

class

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用於存放普...