给出无限的数字序列:
12345678910111213141516 .....等等。我必须找到输入字符串的第一个位置。像这样:
1234 gives 1 13 gives 16 111 gives 12
任何人都已经找到了这样一个问题的算法?
答案 0 :(得分:1)
<强>提示强>:
如果您知道输入字符串以整数开头,则可以通过尝试所有前缀来快速检查该假设。例如, 21521 。
2 不能正确,因为它继续为2 3 4 ......
21 不能正确,因为它继续为21 22 23 ......
215 很好,因为它继续 215 21 6 ...
字符串也可能不是从一个整数开始的,所以你可以尝试将后缀作为一个整数开头,并检查前面的数字。
2 1521 可以 152 1 53 ...,但这之前是15 1 ,
21 512 可以 512 513 ...,但前面有5 11 ,
215 12 可以 1 2 3 ...,但这之前是......没有,
2151 2 可以 2 3 ...,但这之前没有足够的数字。
确定匹配后仍然找到索引。您将不得不累积单位数字的计数,两位数字......
还需要检查是否错过了可能性。
乍一看,此过程需要时间O(N³)
,其中N
是字符串的长度,无论其位置如何。