CodeEval序列转换算法

时间:2014-03-19 08:03:58

标签: algorithm

挑战描述:

有两个序列。第一个序列由数字组成" 0"和" 1",第二个由字母组成" A"和" B"。挑战在于确定是否可以使用以下规则将给定的二进制序列转换为字符串序列:
1." 0"可以转换成非空的字母序列" A" (" A"," AA"," AAA"等)
2." 1"可以转换成非空的字母序列" A" (" A"," AA"," AAA"等)或非空字母序列" B" (" B"," BB"," BBB"等)例如。

还有一些意见: 1010 AAAAABBBBAAAA - valid 00 AAAAAA - valid 01001110 AAAABAAABBBBBBAAAAAAA - valid 1100110 BBAABABBA - not valid

我想知道算法应该是什么样的?

P.S。没有任何线索

2 个答案:

答案 0 :(得分:1)

您可以尝试递归解决方案或动态编程。请注意每次转换

  1. 将1或0的数量减少一个
  2. 不能缩短字符串。
  3. 这意味着在每次递归转换中,As或B的数量可以限制为结果字符串的长度不超过输入中的A-B字符串。

    更具体地说,问题可以通过CYK-Algorithm解决。

答案 1 :(得分:1)

经过几天尝试各种解决方案后,我终于解决了这个问题。 我不会给你答案,但这是方法。

以此测试用例为例:

1010 AAAAABBBBAAAA

请注意,1010可以替换为正则表达式

(A+|B+)A+(A+|B+)A+

这个正则表达式可以生成无限数量的字符串,对字符串进行此分析的最坏情况时间复杂度是指数

但字符串" AAAAABBBBAAAA"只能用(A +)s和(A + | B +)s组成的有限数量的正则表达式来描述,或者在这种情况下,0s和1s

相关问题