【发布时间】:2018-12-19 21:39:30
【问题描述】:
我正在尝试解决这个问题:
给定一个 n * m 的矩阵,包含字母(字符),找到矩阵中字母的最长连续路径并输出字符串。例如:
m = [[a,c,d],[i,b,e],[h,g,f]]
result = e,f,g,h
您只能在矩阵内上下左右移动。到目前为止,这是我在网上了解一些信息后得出的结论,但我并不是一路走来。 我还想让解决方案高效,我当前的代码可能有太多循环,并且对于大型矩阵可能很慢。任何帮助将不胜感激!
R = len(matrix)
C = len(matrix[0])
x = [0, 1, 0, -1]
y = [1, 0, -1, 0]
dp=[[0 for i in range(C)]for i in range(R)]
def isvalid( i, j):
if (i < 0 or j < 0 or i >= R or j >= C):
return False
return True
def getLenUtil(matrix, i, j, prev):
if (isvalid(i, j)==False or isadjacent(prev, mat[i][j])==False):
return 0
if (dp[i][j] != -1):
return dp[i][j]
ans = 0
for k in range(4):
ans = max(ans, 1 + getLenUtil(mat, i + x[k],j + y[k], mat[i][j]))
dp[i][j] = ans
return dp[i][j]
def isadjacent(prev, curr):
if (ord(curr) -ord(prev)) == 1:
return True
return False
def findLongestSequence(matrix):
for i in range(R):
for j in range(C):
dp[i][j]=-1
ans = 0
for i in range(R):
for j in range(C):
if (mat[i][j] == s):
for k in range(4):
ans = max(ans, 1 + getLenUtil(matrix, i + x[k], j + y[k], s));
return ans
【问题讨论】:
-
你在哪里定义了
s?mat和matrix之间似乎也存在不匹配。你调试过这段代码吗? -
当有从“b”到“i”的路径时,为什么示例 4 的答案是?为什么不是8?
标签: arrays python-3.x matrix data-structures