給出乙個由小寫字母組成的矩陣和乙個字典。找出所有同時在字典和矩陣中出現的單詞。乙個單詞可以從矩陣中的任意位置開始,可以向左/右/上/下四個相鄰方向移動。
樣例給出矩陣:
doaf和字典:agai
dcan
返回
dog:
doafadad:gaidcan
dcan:oafa
gaid
can
doafagain:agai
dcan
doafagai
dcan
挑戰使用單詞查詢樹來實現你的演算法
class node
}};class solution
setresult;
int m = board.size();
int n = board[0].size();
vector> flags(m, vector(n, false));
for (int i = 0; i < m; i++)
}vectorrst;
for (set::iterator it = result.begin(); it != result.end(); it++)
return rst;
}private:
void addtotree(node *root, string &word)
else
}p->isend = true;
}void findword(node *root, vector> &board, int m, int n,
int row, int col, vector&buf, set&result,
vector> &flags)
node *p = root->children[board[row][col]-'a'];
if (p == null)
if (flags[row][col])
buf.push_back(board[row][col]);
flags[row][col] = true;
if (root->children[board[row][col]-'a']->isend)
result.insert(temp);
}findword(p, board, m, n, row, col-1, buf, result, flags);
findword(p, board, m, n, row, col+1, buf, result, flags);
findword(p, board, m, n, row-1, col, buf, result, flags);
findword(p, board, m, n, row+1, col, buf, result, flags);
buf.pop_back();
flags[row][col] = false;
}};
單詞搜尋 II
給定乙個二維網格board和乙個字典中的單詞列表words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oath pea ea...
每日leetcode 單詞搜尋 單詞搜尋II
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...
LintCode 單詞搜尋 II
單詞搜尋 ii 給出乙個由小寫字母組成的矩陣和乙個字典。找出所有同時在字典和矩陣中出現的單詞。乙個單詞可以從矩陣中的任意位置開始,可以向左 右 上 下四個相鄰方向移動。您在真實的面試中是否遇到過這個題?yes 樣例 給出矩陣 doaf agai dcan和字典 返回 dog doafa gaidca...