我根据这个答案为这个挑战写了一个解决方案。它成功地处理了给出的示例案例,但不是实际案例。
挑战:
给定两个字符串
s
,并且t
,t
是s
if的子字符串,t
作为连续的符号集合包含在s
(因此,t
必须不超过s
)。符号在字符串中的位置是在其左侧找到的符号总数,包括其自身(例如,“AUGCUUCAGAAAGGUCUUACG”中所有出现的 'U' 的位置是 2、5、6、15、17 和 18 )。
i
位置处的符号s
用 表示s[i]
。的子串
s
可以表示为s[j:k]
,其中j
和k
表示子串在中的开始和结束位置s
;例如,如果s = "AUGCUUCAGAAAGGUCUUACG"
,那么s[2:5] = "UGCU"
。子串的位置
s[j:k]
是它的开始位置j
;请注意,如果它作为子字符串出现不止一次,t
则会有多个位置(请参阅下面的示例)。s
s
鉴于:
两个 DNA 字符串
s
和t
(每个长度最多 1 kbp)。
返回:
的所有位置
t
作为 的子字符串s
。
样本数据集:
GATATATGCATATACTT
ATAT
样本输出:
2 4 10
对于示例,它有效。当然,您需要手动修剪格式,但这只是几秒钟的工作。
不接受实际数据和我生成的输出。
实际数据集:
CAAATAGTCACACAATAGTCGGCTAAATAGTCAATAGTCAAATAGTCAGAGCTAATAGTCTAAATAGTCGAAAAATAGTCATCAATAGTCTAAATAGTCAATAGTCGGAATAGTCAAAATAGTCAATAGTCAATAGTCAATAGTCGACTAAATAGTCCCAATAGTCTCAGAAATAGTCAATAGTCGTAATAGTCAATAGTCTAATAGTCTAATAGTCCAATAGTCTGTCAAATAGTCAATAGTCCAATAGTCGTTTAATAGTCCCCTTTACCAATAGTCAATAGTCCGAATAGTCAGGAATAGTCAGCACTAATAGTCAATAGTCCTAATAGTCCCAATAGTCAAAATAGTCAATAGTCTAAATAATAGTCCTAGCAGAAGAATAGTCTAATAGTCGGCAATAGTCAATAGTCAAATAGTCAGAATAGTCAAATAGTCGAAATAGTCAATAGTCAATAGTCAAATAGTCAAATAGTCAATAGTCAAATAGTCAAATAGTCAAATAGTCGAATAGTCTGTAATAGTCAATAGTCCTTCAATAGTCTAATAGTCATTCAATAGTCAAGAAATAGTCGGGGGAATAGTCCGAATAGTCAAATAGTCAATAGTCGAATAGTCTAATAGTCAATAGTCTAATAGTCTGATAATAGTCAAATAGTCAATAGTCTAAATAGTCGCCTATGCCAATAGTCTTATCAAATAGTCTCTTAATAGTCTAATAGTCAATAGTCAATAGTCTAATAGTCATAATAGTCAATAGTCAAGGAATAGTCCCATAATAGTCAATAGTCTTAATAGTCCAAACGAAATAGTCTTAATAGTCCCTAATAGTCACTAATAGTCGTAATAGTCATAATAGTCCAATAGTCTAAATAGTCTGCAATAGTCAAATAGTCAAATAGTCCGTACAATAGTCTTAATAGTCTTTGCGGCTCAATAGTCTCATAATAGTC
AATAGTCAA
实际输出(修整):
26 33 93 109 118 125 132
代码:
def find_substring_locations(long, short)
mpos = []
re = Regexp.new(short)
m = i = 0
m = re.match( long, i ) { |k| j = k.begin(0); i = j + 1; mpos << j } while m
return mpos
end
def plus_one(input)
arr = []
for i in input
arr << (i += 1)
end
arr
end
main_string = gets.chomp
sub_string = gets.chomp
plus_one(find_substring_locations(main_string, sub_string))
我哪里做错了?它似乎有条不紊。
编辑: 原来问题是环境中的一个小问题。重启后问题无法重现。