n
给定一个由字符组合组成的长度字符串A B D
。
例一:AAAABAAAADADDDDADDDBBBBBBDDDDA
Threshold
的x
,给定的子串可以包含任何其他最大长度的连续子串x
Ex-2:对于A
Ex-1 中的子序列,AAAABAAAADA
是阈值为 的具有 (1,11) 边界的合法子串x = 2
。
同样,我想分别提取子字符串A
和子字符串D
,忽略B
主字符串。主字符串中每种类型可以有许多子字符串。
模型输出:
Type Boundaries
A 1,11
D 12,20
D 26,29
A
如果距离大于阈值会破坏字符串,我通过查找 s 之间的距离来实现一种效率低下的非算法方式。我不得不为A
和单独运行这个D
。这导致边界区域重叠。
我可以有更好的方法来解决这个问题吗?
编辑-1
合法子字符串可以是任意长度,但不应被大于 threshold 的其他子字符串污染x
。这意味着在搜索它的子字符串时A
,不应包含其他字符B
或D
连续大于阈值。
如果x = 2
在搜索时A
,AABBAAAA, AABDAAAA
是有效的,但不是AADBDAAA, AABBBAAA
。同样,在搜索 D(A
并且B
将成为污染者)时。
使用“Pham Trung”答案的 EDIT-2实施
代码:
start = 0
lastA = -1
lastD = -1
x = 2
arr = ["A", "A", "A", "A", "B", "A", "A", "A", "A", "D", "A", "D", "D", "D", "D", "A", "D", "D", "D", "B", "B", "B", "B", "B", "B", "D", "D", "D", "D", "A"]
for i in range(0, len(arr)):
if(arr[i] == 'A'):
if(lastA != -1 and i - lastA > x):
print("A", start + 1, lastA + 1)
start = i
lastA = i
elif(arr[i] == 'D'):
if(lastD != -1 and i - lastD > x):
print("D", start + 1, lastD + 1)
start = i
lastD = i
输出:
A 1 11
D 16 19
A 26 16
代码无法在子字符串之后提取子1st
字符串。