forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.go
29 lines (29 loc) · 882 Bytes
/
Solution.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func placeWordInCrossword(board [][]byte, word string) bool {
m, n := len(board), len(board[0])
k := len(word)
check := func(i, j, a, b int) bool {
x, y := i+a*k, j+b*k
if x >= 0 && x < m && y >= 0 && y < n && board[x][y] != '#' {
return false
}
for _, c := range word {
if i < 0 || i >= m || j < 0 || j >= n || (board[i][j] != ' ' && board[i][j] != byte(c)) {
return false
}
i, j = i+a, j+b
}
return true
}
for i := range board {
for j := range board[i] {
leftToRight := (j == 0 || board[i][j-1] == '#') && check(i, j, 0, 1)
rightToLeft := (j == n-1 || board[i][j+1] == '#') && check(i, j, 0, -1)
upToDown := (i == 0 || board[i-1][j] == '#') && check(i, j, 1, 0)
downToUp := (i == m-1 || board[i+1][j] == '#') && check(i, j, -1, 0)
if leftToRight || rightToLeft || upToDown || downToUp {
return true
}
}
}
return false
}