有两个问题,我不能只为所有情况下降。这两个问题中使用的语言是{a,b,c}
- a,b和c的所有字符串都不包含紧随任何b的
醇>
到目前为止,我有(a|c|b(bc+|b*c))*
在某些情况下有效,但在b结束时需要连续两个b,我不知道如何解决。
- a,b和c的所有字符串不超过2 b和2 a。
醇>
我知道这必须是格式为c*(a|b)c*(a|b)c*
的东西......但是我不知道如何“计算”a和b的比较,因为我知道用这些符号计算正则表达式是不可能的。< / p>
任何帮助我指明正确方向的帮助都会有所帮助,即使它需要问题范围之外的符号。
答案 0 :(得分:1)
要允许b
在最后添加b*
。
(a|c|b(bc+|b*c))*b*
你可以简化一些。不需要+
中的bc+
,因为c
之后|c|
已经涵盖了b(bc|b*c)
的可能性。这留下b(b*c)
,可以简化为b+c
,后者又缩减为(a|b+c|c)*b*
。最终结果:
aabb|abab|abba|baab|baba|bbaa
一个不优雅的答案是列出2 a和2 b的所有安排。
?
添加x?
以便它们都是可选的,满足“最多2”的要求。您可以假装每个(x|ε)
都是a?a?b?b?|a?b?a?b?|a?b?b?a?|b?b?a?a?|b?a?b?a?|b?a?a?b?
。
c*
然后拍打c*a?c*a?c*b?c*b?c*|c*a?c*b?c*a?c*b?c*|c*a?c*b?c*b?c*a?c*|
c*b?c*b?c*a?c*a?c*|c*b?c*a?c*b?c*a?c*|c*b?c*a?c*a?c*b?c*
到处都是。
{{1}}
男孩,我不为这个答案感到自豪。