矩阵中出现的单词从左到右,向下或向左对角线(向上或向下)

时间:2019-12-31 06:16:44

标签: javascript c python-3.x algorithm sorting

我有一个定义矩阵维的输入,然后 我有一个具有该维度的方阵,其中包含作为输入的随机字母,我有一个输入字符串,我想搜索矩阵中的字符串,我可以在从左到右水平垂直向下对角线向左(向上和向下)

对给定矩阵的解释

n = 3
A A K
A S K
A K K

  00 01 02
00 A  A  K 
10 A  S  K
20 A  K  K

对于给定的字符串ASK,我必须搜索所有出现的“ ASK”

输出将为 4 ,因为出现了四次“ ASK”

2是简单的一个:01,11,21,其次是10,11,12

但是我不明白如何匹配该字符串以对角线向上或向下向左。 第三名:02,11,20和第四名:22,11,00

2 个答案:

答案 0 :(得分:0)

对于从左到下的对角线搜索,您应该使用类似以下的循环, 假设它与行有关,j与列有关,并且 这两个索引的左上角都以零开头:

对于对角线搜索,应减少左上行,并增加列:

int i = n-1;
int j = 0;
while(i >=0 )
{
     //access element x[i][j] and store to a resulting string
   i--;
   j++;   
}
// compare resulting string to predefined string

对于对角线搜索,应从左至右向上减少行数和列数:

int i = n-1;
int j = n-1;
while(i >= 0)
{
    //access element x[i][j] and store to a resulting string
   i--;
   j--;   
}
// compare resulting string to predefined string

答案 1 :(得分:0)

首先,您必须找到组成一个组合的所有元组,以便可以读取字符串。

根据我的观点,为网格的每个位置分配特定编号会更容易,因此在3x3矩阵中,它将是:

A H G    # A is 1; H is 2; G is 3; next line: C is 4; B is 5...
C B M
F U S

因此,制定一个通用的解决方案来确定数字将它们按列表排序(我不知道您的输入格式,所以我认为它是列表):

m = ['A', 'H', 'G', 'C', 'B', 'M', 'F', 'U', 'S']

接下来,要查找所有元组,我们需要查看上面的示例。 在列表多数民众赞成的位置,[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8] 最后[0, 4, 8], [2, 4, 6]

这是一种解决以下问题的算法:

def findTp(dimension):
    l1 = []
    l2 = []
    lRes = []
    lR = range(0, dimension**2)
    for c in range(dimension**2):
        l1.append(lR[c:c+dimension])
    lRes.append(l1[::dimension])

    lR = []
    for i in range(dimension**2):
        lR.append(i)
    for i in range(dimension):
        lRes.append(lR[i::dimension])

    lR = []
    for i in range(dimension**2):
        lR.append(i)
    lRes.append(lR[::dimension+1])
    d = lR[dimension-1::dimension-1][:dimension]
    lRes.append(d)

    return lRes

接下来,我们将做一些魔术来将第一个列表提取到lRes

a = findTp(dimension)
b = a[1:]
c = a[0]
for i in c:
    b.append(i)

现在,我们将结果存储在b中。

希望有帮助。