Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 단어 검색 II

<시간/>

2D 보드와 단어 목록이 있다고 가정합니다. 그래서 사전에서 칠판에 있는 모든 단어를 찾아야 합니다. 여기서 각 단어는 순차적으로 인접한 셀의 문자로 구성되어야 하며, 여기서 인접한 셀은 수평 또는 수직으로 인접한 셀입니다. 동일한 문자 셀이 한 단어에서 두 번 이상 사용될 수 없음을 명심해야 합니다.

따라서 입력이 다음과 같은 경우 -

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 배열 결과 만들기

  • solve()라는 메서드를 정의합니다. 이것은 board, d, i, j s를 사용합니다.

  • i 또는 j가 각각 보드 행 및 열 범위에 없으면 false를 반환합니다.

  • l :=보드[i, j]

  • l이 d에 있으면

    • d :=d[l], l을 s와 연결

    • #이 d에 있고 d[#]가 null이 아니면

      • 결과에 s 삽입

      • 세트 d[#] :=0

    • 보드[i, j] :=*

    • i+1 <보드의 행 수 및 d의 보드[i + 1, j]이면

      • 해결 호출(보드, d, i + 1, j, s)

    • j+1 <보드의 열 수 및 d의 보드[i, j+1]이면

      • 해결 호출(보드, d, i, j+1, s)

    • i-1> 0이고 d에서 board[i - 1, j]이면

      • 해결 호출(보드, d, i - 1, j, s)

    • j-1> 0이고 d에서 board[i, j-1]이면

      • 해결(board, d, i, j-1, s) 호출

    • 보드[i, j] :=l

  • insert()라는 하나의 메서드를 정의하면 단어와 사전이 필요합니다. t

  • 현재 :=t

  • 나는 단어로

    • i가 현재 상태가 아니면 current[i] :=new map

    • 현재 :=현재[i]

  • 현재[#] :=1

  • 주요 방법에서 다음을 수행하십시오 -

  • 지도 만들기 t

  • 단어로 된 단어:insert(word, t) 호출

  • 보드의 각 셀 i, j에 대해 - solve(board, t, i, j) 호출

  • 반환 결과

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   def findWords(self, board, words):
      self.result = []
      t = {}
      for word in words:
         self.insert(word,t)
      for i in range(len(board)):
         for j in range(len(board[0])):
            self.solve(board,t,i,j)
      return self.result
   def solve(self,board,d,i,j,s=""):
      if i<0 or j<0 or i>=len(board) or j>=(len(board[0])):
         return
      l = board[i][j]
      if l in d:
         d = d[l]
         s+=l
         if "#" in d and d['#']:
            self.result.append(s)
            d['#'] = 0
         board[i][j] = '*'
         if i+1<len(board) and board[i+1][j] in d :
            self.solve(board,d,i+1,j,s)
         if j+1 < len(board[0]) and board[i][j+1] in d:
            self.solve(board,d,i,j+1,s)
         if i-1>=0 and board[i-1][j] in d :
            self.solve(board,d,i-1,j,s)
         if j-1>=0 and board[i][j-1] in d :
            self.solve(board,d,i,j-1,s)
         board[i][j] = l
   def insert(self, word,t):
      current = t
      for i in word:
         if i not in current:
            current[i] = {}
         current =current[i]
      current['#']=1

ob = Solution()
print(ob.findWords([["o","a","a","n"],["e","t","e","a"],["i","h","k", "r"],["i","f","l","v"]],["oath","pea","tea","rain"]))

입력

[["o","a","a","n"],
["e","t","e","a"],
["i","h","k","r"],
["i","f","l","v"]],
["oath","pea","tea","rain"]

출력

['oath', 'tea']