从左到右阅读时,a和b的数量相同但从不超过另一个字母的三个

时间:2013-11-02 21:12:00

标签: regex finite-automata state-machine

我是否可以获得如何为字母{a,b}构建正则表达式的提示,该字母接受所有字符串:

  1. 拥有相同数量的a&{39}和b
  2. 从左到右阅读字符串,a&{39}和b的数量之间的差异永远不会超过两个。
  3. 例如:

    • aaa不是有效的(因为有a超过b' s
    • aa无效(ab' s的数量不相同
    • aababb有效(ab的相同数量以及a的累计数量&#39}或b' s永远不会比另一个多三个)
    • [空字符串]有效
    • bbaabbaa有效

1 个答案:

答案 0 :(得分:2)

如果仅存在第一个约束(have the same number of a's and b's)则不可能。由于第二个约束,可以解决您的问题。

首先想到完成工作的有限自动机(我把它作为练习留给你)然后将其转换为正则表达式会更容易。

转换的正则表达式将是: [ (((a | (aab) (ab)*) b)* (((b | bba) (ba)*) a)* ]*(也许它可以简化,也可以留给你作为练习)。