给你一个 m x n 的矩阵 board ,它代表一个填字游戏 当前 的状态。填字游戏格子中包含小写英文字母(已填入的单词),表示 空 格的 ' ' 和表示 障碍 格子的 '#' 。
如果满足以下条件,那么我们可以 水平 (从左到右 或者 从右到左)或 竖直 (从上到下 或者 从下到上)填入一个单词:
该单词不占据任何 '#' 对应的格子。
每个字母对应的格子要么是 ' ' (空格)要么与 board 中已有字母 匹配 。
如果单词是 水平 放置的,那么该单词左边和右边 相邻 格子不能为 ' ' 或小写英文字母。
如果单词是 竖直 放置的,那么该单词上边和下边 相邻 格子不能为 ' ' 或小写英文字母。
给你一个字符串 word ,如果 word 可以被放入 board 中,请你返回 true ,否则请返回 false 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-word-can-be-placed-in-crossword
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
python。
每一行和每一列的字符串按 '#' 分割为子串,判断每个子串是否匹配 word 或 word[::-1] 即可。
class Solution:
def placeWordInCrossword(self, board: List[List[str]], word: str) -> bool:
for row in chain(board, zip(*board)):
s = ''.join(row).replace(' ', '.');
for ss in s.split('#'):
if len(ss) == len(word) and (re.match(ss, word) or re.match(ss, word[::-1])):
return True
return False