这是如何解决此问题的一般说明.将其转换为Java仍然很困难.
输入的String基本上是所有自然数1 2 3 4 5 6 8 9 10 11 …的无限序列.
我相信练习的重点是确定子字符串n所属的输入字符串的自然数的第一个子序列,然后在不实际构造大的“无限”字符串的情况下计算其索引.
为此,您必须尝试将子字符串n拆分为一个数字递增的序列,该序列应具有尽可能少的数字.
首先,您必须检查子字符串n是否创建一个由一位数字组成的序列.就是这种情况,例如,如果n == 345678(请注意,n可能同时包含一位数字和两位数字,例如n == 345678910,您也应该能够识别).
如果在该步骤中失败,则应查找两位数的序列.例如,如果n == 33343536,就是这种情况.现在,这可能会变得更加棘手,因为n == 2333435363也是两位数字的序列,但是序列的前导和尾数(32和37)是被截断.
如果再次失败,则将查找3位数字的序列.
如果找不到任何序列,则将整个子字符串n视为大字符串中的单个数字.
现在,假设n是199319941995,您在上一步中发现序列中的第一个数字是1993.剩下的工作是计算输入String中数字1993的索引.您知道单位数字采用1 * 9索引.两位数字取2 * 90索引.三位数代表3 * 900索引. 1000和1993之间的3位数字采用4 * 993索引.因此1993年的索引是1 * 9 2 * 90 3 * 900 4 * 993,这是子字符串199319941995的第一个索引.