假设我有一些包含序列的序列,{A,B}
并且序列中的每个字母至少出现一次。如何在满足要求的序列中找到子字符串:
- A 的数量与 B 的数量应该是可能的最高比率(#A/#B --> max)
- 如果有许多具有相同比率的子字符串,我们必须返回最长的子字符串
- 最后,如果有很多相同长度的,我们必须返回具有较低起始索引的那个
作为输出,我们想要找到的子字符串的开头索引及其长度。
例子
IN: AAABAA
OUT: index = 0, length = 6 (ratio is 5 : 1)
IN: BABAABBA
OUT: index = 1, length = 4 (ratio is 3 : 1)
任何提示如何解决问题?
作为一个请求,我正在添加我的想法:
- 如果某些两组连续的 A 与 3 个或更多 B 分开,则没有理由进一步测试它。这很简单,因为如果我们有像这样的子字符串:
...A{k}BBBA{m}...
ratio is(k+m):3
whilek:1
orm:1
must give better option 我还尝试按顺序查找 A 的所有最长子串。我认为我的序列很有可能是这样的,
A{N1}BA{N2}BA{N3}
但后来我发现它不一定是真的,例如:巴巴巴巴
我们可以看到有两个具有相同比率的序列:
- i=1 长度=4
- i=6 长度=4
但正如第 3 条规则所暗示的那样,我应该返回第一个,因为我说过我的算法是基于序列中最长的连续 A。