矩阵中最长的相邻字符串序列

时间:2019-05-28 19:24:24

标签: python python-3.x matrix iteration

我有以下任务,我需要一些帮助。假设您具有以下矩阵:

[['R', 'R', 'R', 'G'], 
['G', 'B', 'R', 'G'], 
['R', 'G', 'G', 'G'], 
['G', 'G', 'B', 'B']]

我的代码:

# Open the unit test in read mode.

file_handle = open('test_3', 'r')

# Create a list of lines.

lines_list = file_handle.readlines()

# Find the matrix dimensions. Cast values to integers from strings.

cols, rows = (int(val) for val in lines_list[0].split())

# Do a double-nested list comprehension to get the rest of the data. Slice to exclude dimensions.

matrix = [[val for val in line.split()] for line in lines_list[1:]]
counter = 0

for i in range(len(matrix) - 1):
    for j in range(len(matrix[i]) - 1):
        if matrix[i][j] == matrix[i][j + 1]:
            counter += 1

print(counter)

我需要遍历行和列,并计算相同字符串的最长序列(不包括对角线)。因此,在此测试用例中,如果我们遵循从第1行到底部的G,则序列的总数为7。

我的想法是使用嵌套的for循环遍历矩阵,检查每个子数组中的下一个项目是否与上一个相同,并相应地增加一个计数器变量。

如何同时对矩阵的列执行此操作?

请记住,我正在寻找对菜鸟友好的解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

for i in range(len(matrix) - 1):
    for j in range(len(matrix[i]) - 1):

您遇到了解析colsrows的麻烦-最好将它们用作循环边界。

        if matrix[i][j] == matrix[i][j + 1]:

是的,这只处理一个方向。 考虑定义一个neighborhood

    nbrhd = [
        (0, 1),
        (-1, 0),
        (0, -1),
        (1, 0),
    ]

然后您可以迭代dx, dy, 将这些增量添加到当前位置。

考虑使用numpy array而不是列表列表, 因此您的ij索引不会倒退。

算法

您需要解决的主要问题是选择一种算法, 写下所需方法的说明, 并开始实施。

例如,也许您希望将其视为“算面包屑” 锻炼身体,捡起它们以避免陷入循环中。 或者,您可能更希望生成一个价值图, 显示访问每个广场多少钱值得 从某个起点开始。

简而言之,您遇到了不知道如何解决的复杂问题, 并且您需要写下一个或多个您可以解决的“简单”子问题 以及距离目标更近几英寸。