212 單詞搜尋II

2021-10-04 04:30:51 字數 1487 閱讀 6569

思路:

先將單詞插入到字首樹中,然後再dfs一步步去判斷下乙個要遍歷的字元是否存在字首樹中,若存在,則加入中間變數中,若當前遍歷的字串行在字典樹中組成乙個單詞,則加入ans中

不存在,則停止該方向的搜尋,因為字首不存在,則後面dfs生成的單詞均以此為字首,均不存在

在dfs時使用乙個set來儲存存在於字首樹中的單詞,因為遍歷時可能會有重複的單詞加入,注意dfs時對於vis陣列和中間變數的重置。

最後將自動排序好的set轉為vector作為ans返回即可。

class

trie

void

insert

(const string& word)

t->is_end =

true;}

};class

solution

, dy[4]

=;set aws;

// 暫存遍歷時的存在的單詞,可能會有重複元素,去重用set

string temp;

// 用來儲存遍歷時生成的中間字串

vectorbool

>> vis;

// 標記是否訪問過

public

:solution()

void

dfs(

int i,

int j,

const vectorchar

>>

& board,

const trie *t)

vis[i]

[j]=

true;if

(t->next[c -

'a']

->is_end ==

true

) aws.

insert

(temp)

;// 組成字首樹中的乙個單詞

for(

int k =

0; k <4;

++k)

// 執行到這裡重置vis和temp

vis[i]

[j]=

false

; temp.

pop_back()

;}vector

findwords

(vectorchar

>>

& board, vector

& words)

for(

int i =

0; i < row;

++i)

// 對整個圖dfs

for(

int j =

0; j < col;

++j)

dfs(i, j, board, root)

; vector

ans(aws.

begin()

, aws.

end())

;// set轉換為vector

return ans;}}

;

212 單詞搜尋 II

給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oath pea...

leetcode 212 單詞搜尋II

題目 我的思路 使用回溯,重要是剪枝,這點可以讓程式不用花太多時間做無用功。我的解答 class solution for int i 0 i position.size i used new int board.length board 0 length used x y 0 已被使用 retur...

LeetCode212 單詞搜尋 II

題目描述 給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oat...