这是uber 的真实面试题
Given a two dimensional array of letters, find a given word written in any of the 8 directions.
Example:
Word: UBER
Array:
[["A", "U", "I", "K", "F", "W", "N"],
["W", "Q", "B", "O", "L", "X", "P"],
["T", "L", "A", "E", "R", "E", "C"],
["Y", "Z", "X", "E", "R", "L", "W"]]
Output: true题目要求在一个二维字母矩阵里查找给定单词。单词可以沿着 8 个方向出现:上、下、左、右、左上、右上、左下、右下。只要从某个格子出发,沿着同一个方向连续匹配完整个单词,就返回 true。
这题最容易误解的地方是:它不是每一步都能转弯的 Word Search。方向一旦确定,就要一直沿着这个方向走。
解法很简单:遍历矩阵中的每个格子,把它当作起点。如果字符等于 word[0],就尝试 8 个方向。每个方向用 (dx, dy) 表示,比如右下角是 (1, 1)。然后依次检查:
grid[row + i * dx][col + i * dy] == word[i]中途越界或者字符不匹配,这个方向就失败。只要某个方向完整匹配,直接返回 true。全部尝试后还找不到,就返回 false。
时间复杂度是 O(m * n * 8 * L),其中 m 和 n 是矩阵大小,L 是单词长度。因为 8 是常数,也可以写成 O(m * n * L)。空间复杂度是 O(1)。
这道题本身不难,重点是面试时要先确认“方向是否固定”。确认清楚后,用 8 个方向数组统一处理,代码会很短,也不容易写乱。
csoahelp 做的就是这种场景里的实时辅助,题目刚读完就能给出完整思路,现场不用卡壳。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

