Problem
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not allocate extra space for another array; you must do this by modifying the input array in-place with O(1) extra memory.
Algorithm
Using a queue to save the data in-place. If there are two same number in the queue already then ignore it.
Code
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
if not board or not board[0]:
return word == ""
if word == "":
return True
steps = board.copy()
r = len(board)
c = len(board[0])
d = len(word)
dxy = [[1, 0], [0, 1], [-1, 0], [0, -1]]
def dfs(y, x, k):
# print(steps)
if k == d:
return True
for i in range(4):
yy = y + dxy[i][0]
xx = x + dxy[i][1]
if yy >= 0 and yy < r and xx >= 0 and xx < c:
if not steps[yy][xx] and board[yy][xx] == word[k]:
steps[yy][xx] = k
if dfs(yy, xx, k+1):
return True
steps[yy][xx] = 0
return False
for ir in range(r):
for ic in range(c):
if board[ir][ic] == word[0]:
steps = [[0] * c for _ in range(r)]
steps[ir][ic] = -1
if dfs(ir, ic, 1):
return True
return False