【发布时间】:2014-03-12 07:28:59
【问题描述】:
我想选择具有以下属性的一组子字符串覆盖的字符串部分:
- 它们属于原始字符串。
- 它们可能有不同的长度和位置。
- 它们可以重叠。
- 它们可能不会按照它们在原始字符串中出现的顺序排列。
例如:
string = "MGLSDGEWQQVLNVWGKVEADIAGHGQEVLIHSKHPGDFGADAQGAMTKALELFRNDIAAKYKELGFQG"
substring1 = "HPGDFGADAQGAMTKALELFR"
substring2 = "GEWQQVLNVWGK"
substringn = "ALELFRNDIAAKYK"
我想得到:
coverage = "MGLSD<b>GEWQQVLNVWGK</b>VEADIAGHGQEVLIHSK<b>HPGDFGADAQGAMTKALELFRNDIAAKYK</b>ELGFQG"
我试图提取字符串中子字符串的位置,如下所示:
substrings_array.each do |substring|
start_pos = string.index substring
end_pos = string.length - (string.reverse.index(substring.reverse) )
end
这样,我得到每个子字符串的开始和结束位置。我怎样才能将它们全部合并,特别是考虑到它们可能重叠并以不同的顺序出现?这甚至是一个好策略吗?
【问题讨论】:
-
这看起来是一个不错的开始策略,尤其是如果你将
.each转换为.map并返回需要标记的开始/结束位置列表。然后你的问题就变成了“我如何合并这些范围,以便重叠的范围合并成一个更大的范围”。 -
我会说你已经完成了 80%,所以你想做的是在 start_pos 插入
<b>和在 end_pos 插入<\b>,这似乎已经完成了,你可以clone字符串并修改克隆的字符串,然后返回克隆的字符串作为您的答案,例如new_string = string,然后在获得start_pos和end_pos之后,您想在new_string中插入标签,用于插入的ruby 文档是@ 987654321@