例如,CABAAXBYA中有四个这样的子串。
我使用的原始强力算法是,使用外部for循环,每当遇到A时,我进入另一个for循环以检查是否存在B。如果找到B,我会增加计数。最后,存储在count变量中的值会产生所需的结果。
我在阅读有关字符串匹配算法的过程中遇到了一个问题,当你从右到左而不是从左到右遍历时,你的算法效率更高但是这里子字符串不是作为函数的参数给出的。用来计算所需的值。
我的问题是,如果我从右到左而不是从左到右遍历字符串,它会使我的算法在任何情况下都更有效吗?
答案 0 :(得分:8)
这是一种向后遍历字符串的方法可能导致O(n)计算而不是原始的O(n ^ 2)工作:
A = "CABAAXBYA"
count = 0 # Number of B's seen
total = 0
for a in reversed(A):
if a=='B':
count += 1
elif a=='A':
total += count
print total
这可以通过跟踪当前点右边B的数量来计算。
(当然,你也可以通过计算左边A的数量来获得与前向迭代相同的结果:
count = 0 # Number of A's seen
total = 0
for a in A:
if a=='A':
count += 1
elif a=='B':
total += count
print total
)