【发布时间】:2014-07-28 00:37:53
【问题描述】:
我得到一个仅由 0 到 9 的数字组成的字符串。我想计算其中有多少子字符串是 2 的幂。
例如对于子串 2560616,子串 256 和 16 是 2 的幂。我需要计算任何给定子串中有多少这样的子串。
请注意,子字符串非常大,因此蛮力无法工作。所以我主要想解决2个问题
- 如何有效地计算所有 2 次方的子串
- 如何有效地计算子串是否是 2 的幂
我认为可能有 DP 方法,但我不确定。
【问题讨论】:
-
你说的字符串有多长?它决定了最佳方法是什么。
-
@Coda17 字符串长度最大为 10^5
-
除非你能想出一些花哨的数学算法,否则我认为你最好的选择是分支和修剪。困难在于尽早修剪。但是确保立即忽略任何以奇数结尾的字符串是一个开始。您还可以预先计算所有 2 的幂,以使将任何字符串与 2 的幂匹配只有 O(1) 时间复杂度。或者,您可以预先计算 2 的所有幂,然后使用正则表达式搜索您计算的数字的每一次出现。
-
在您的示例中,子字符串“2”和“1”呢?
-
@NiklasB.是的,我忘了提。你能帮忙解决一下吗
标签: string algorithm dynamic-programming