- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找一种可用于解决此问题的快速算法:给出 A 和 B 整数(在 [0,10^18] 范围内),并给出 N (N<=1000) 的列表数字子串;目标是计算 [A,B] 范围内包含任何 N 个子字符串的所有数字。我们总是 A<=B 并且数字子串也是 [0,10^18] 范围内的整数。
示例 1:如果 A=10,B=22,并且给定 N=2 个子字符串={1,10};计数将是 = 11;数数:10->19 和 21。
例子2:如果A=175,B=201,给定N=3个子串={55,0,200};计数将是 = 4;数数:180、190、200 和 201。
直接的方法是逐个分析 [A,B] 范围内的每个整数,但这不是解决方案,因为范围可能太大(直到 10^18 个整数)。
为了降低问题的复杂性,我做的第一件事是从原始的 N 个子串列表中删除一些无用的子串,这样“另一个子串中不包含任何子串”。例如:{1,10} 变为 {1},{55,0,200} 变为 {55,0}。这不会改变最终计数。
接下来,即使假设我们可以得到 [A,B] 范围内的一个子串的计数,我们仍然不能将这个计数与列表中其他子串的计数相加,因为一个数字可以包含多个子串,不应该是数了不止一次。
有什么解决问题并获得所需数量的想法吗?
最佳答案
我认为这更像是一个组合问题。
计算A和B之间的数字可能的位数。例如2到2000之间,位数可以是1、2、3或4。如果是1位,则需要计算数字> 2 和 4 位数,你必须计算小于 2000 的数字,即从 1 开始。
如果数字的个数是 k,你必须说找到包含子字符串 234 的数字,然后选择你将放置该子字符串的位置(以 k-2 种方式),然后找到所有的排列数可能的剩余数字(我认为有 10 ^ (k-3) 种方式)。当然,您必须对前导零等打折。
对所有子字符串重复此操作。
现在您必须减去包含多个子字符串的字符串。对子字符串的所有组合重复上述过程,并将其从计算值中减去。
关于计算数值范围内子串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19079947/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!