在矩阵中查找子序列
Find subsequence in matrix
我在网上练习时遇到了这个挑战,“给定一个六字符的字符串数组(DNA字符串)查找是否有突变,如果找到4个等于的子序列就知道是否存在突变连续的字符,可以竖着、横着、斜着找。
所以如果我有下一个字符串数组:
dna = { "ATGCGA", "CAGTGC", "TTATGT", "AGAAGG", "CCCCTA", "TCACTG" }
可能会变成这样的矩阵:
ATGCGA
CAGTGC
TTATGT
AGAAGG
CCCCTA
TCACTG
需要注意的是,字符串的长度不能为6,但所有数组的长度必须相同,以形成NxN
矩阵。
算法的输出应该是true
,因为它有三个突变。
AXXXXX
XAXXXX
XXAXXX
XXXAXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
CCCCXX
XXXXXX
XXXXGX
XXXXGX
XXXXGX
XXXXGX
XXXXXX
XXXXXX
这些突变中的任何一个都必须使算法 return 它有一个突变。
我试图通过将矩阵链接成 3 个不同的字符串来应用最长的公共子序列,换句话说,一个大列、一个大行和一个大对角线,但这使算法的效率最差。
有人可以指导我吗?
如果我们只是寻找相同字母的连续序列,我们可以在 O(min(m, n)) space 和 O(mn) 时间内解决这个问题,其中 m 是数字行数和 n 列数。从左上角逐行迭代(例如)。对于每个单元格,记录上方、左侧和西北部的连续单元格的数量,如果邻居具有相同的字母,则在每个相应方向的邻居的记录中加 1;否则,记录 1.
(如果我们正在寻找不一定连续的子序列,我们仍然可以用相同的复杂度来解决它,前提是字母表是固定的,但是我们必须为每个记录中的每个字母保留一个状态.)
我在网上练习时遇到了这个挑战,“给定一个六字符的字符串数组(DNA字符串)查找是否有突变,如果找到4个等于的子序列就知道是否存在突变连续的字符,可以竖着、横着、斜着找。
所以如果我有下一个字符串数组:
dna = { "ATGCGA", "CAGTGC", "TTATGT", "AGAAGG", "CCCCTA", "TCACTG" }
可能会变成这样的矩阵:
ATGCGA
CAGTGC
TTATGT
AGAAGG
CCCCTA
TCACTG
需要注意的是,字符串的长度不能为6,但所有数组的长度必须相同,以形成NxN
矩阵。
算法的输出应该是true
,因为它有三个突变。
AXXXXX
XAXXXX
XXAXXX
XXXAXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
CCCCXX
XXXXXX
XXXXGX
XXXXGX
XXXXGX
XXXXGX
XXXXXX
XXXXXX
这些突变中的任何一个都必须使算法 return 它有一个突变。
我试图通过将矩阵链接成 3 个不同的字符串来应用最长的公共子序列,换句话说,一个大列、一个大行和一个大对角线,但这使算法的效率最差。
有人可以指导我吗?
如果我们只是寻找相同字母的连续序列,我们可以在 O(min(m, n)) space 和 O(mn) 时间内解决这个问题,其中 m 是数字行数和 n 列数。从左上角逐行迭代(例如)。对于每个单元格,记录上方、左侧和西北部的连续单元格的数量,如果邻居具有相同的字母,则在每个相应方向的邻居的记录中加 1;否则,记录 1.
(如果我们正在寻找不一定连续的子序列,我们仍然可以用相同的复杂度来解决它,前提是字母表是固定的,但是我们必须为每个记录中的每个字母保留一个状态.)