一月<二月<三月<...< 十二月
(使用从零开始的整数表示月份),例如:
一月是0,二月是1,...,十二月是11。
现在假设我没有完整的月份名称,并且给出了以下列表,其中月份已缩写为它们的首字母,而“e”代表一个空类别,如下所示:
e,F,e,e,e
如果我建立了一个“明确的月份”列表(f: 1,s: 8,o: 9,n: 10,d: 11),我可以通过先计算第一个类别(使用减法和模12),然后从那里写出其他内容来填充空类别。然而,假设我收到以下列表:
e,A,e,e,J,e
然后我可以(直观地)计算,尽管“A”是模棱两可的(可能是四月或八月),但在这种情况下它只能是四月,因为八月在经过2个类别后没有任何“ J”跟随。找到这个后,我可以从头开始再次计算所有内容。
我的问题是:是否有此问题的分析解决方案(函数、算法),或者我的唯一希望是使用暴力来定义每个潜在关系?对于某些例子,无法编写消歧算法/函数:考虑一个由11个“ e”组成的“ J”,后跟一个由11个“ e”组成的“ J”……由于它们之间有一年,所以我无法将“ J”区分为1月、6月或7月。
答案: 我最终编写了Il-Bhima的答案,因为对于特定情况,正则表达式是可以接受的,即使运行时间较高O(mn)。然而,我接受Ben的答案作为正确答案,因为它涵盖了其他答案(提到了正则表达式解决方案),但也提出了更好的方法,即使用KMP算法O(m+n),尽管这是针对要匹配模式的字符串数量较大的情况。谢谢大家。