# 给你一个字符串,和一个二维数组,如果字符串在数组中没,返回字符串在数组的下标 # 要求: # 1)需要按照字符串顺序搜索,水平或者垂直方向搜索 # 2)同一单元格不允许重复使用 # 3)假定数组中最多只存在一种匹配 # 找不到返回N # # 输入: # 第一行n表示有n行字符数组输入 # 接下来n行字符串 # 第n+2行表示要查找的字符串 # 4 # A,C,C,F # C,D,E,D # B,E,S,S # F,E,C,A # ACCESS # # 输出: # 0,0,0,1,0,2,1,2,2,2,2,3 # import sys def exist(board, word): h = len(board) w = len(board[0]) visited = [[False for j in range(w)] for i in range(h)] for i in range(h): for j in range(w): if check(board, visited, i, j, word, 0): res.append(str(i) + "," + str(j)) # 最后添加起点坐标,这里是(0,0) return True # 当前坐标(i,j)为起点找到给定字符串 return False # 遍历所有元素作为起点 ,没找到给定字符串 def check(board, visited, i, j, s, k): # 如果搜索当前字符和要查找的字符不等,直接返回False if board[i][j] != s[k]: return False # 终止条件 elif k == len(s) - 1: return True visited[i][j] = True directions = [[0, 1], [0, -1], [1, 0], [-1, 0]] for dir in directions: newi = i + dir[0] newj = j + dir[1] if newi >= 0 and newi < len(board) and newj >= 0 and newj < len(board[0]): if not visited[newi][newj]: # 不停深度递归查找到最后一个元素匹配,达到终止条件 if check(board, visited, newi, newj, s, k + 1): # res = ['2,3', '2,2', '1,2', '0,2', '0,1'] res.append(str(newi) + "," + str(newj)) visited[i][j] = False # 如果最后一个元素匹配,开始回溯,并倒序的添加结果到res return True visited[i][j] = False return False res = [] N = int(input().strip()) matrix = [list(input().strip().replace(",", "")) for i in range(N)] word = input().strip() if exist(matrix, word): # res= ['2,3', '2,2', '1,2', '0,2', '0,1', '0,0'] for i in range(len(res) - 1, -1, -1): sys.stdout.write(res[i]) if i != 0: sys.stdout.write(",") else: print("N")
26.找单词--OD
于 2024-03-24 12:37:19 首次发布
本文介绍了在一个二维数组中按照特定规则(不允许重复使用同一单元格)搜索给定字符串的方法,通过深度递归实现路径的追踪,并返回找到字符串的坐标序列。
摘要由CSDN通过智能技术生成