它主要在标题中,我的意思是交替是在两次出现的0之间存在单个1或0。所以没有出现 0 1 0 或 0 0 0 。
我试图理解问题的理论性质,所以我更喜欢连接,连接和闭包(10,1 | 0和10 *)。
请注意这是 NOT 一个我刚才对这个问题感兴趣的作业问题,所以请不要光顾那些影响的评论。
编辑:将第一段中的措辞从“ 出现次数”更改为“两次出现之间”。
答案 0 :(得分:5)
第一个重要的观察是我们可以减少问题:如果S被允许并且是1
或以两个结束,则S与任何允许的序列连接仍然是允许的。那么是什么使得有效的S?
1
显式位于S中,任何多个1
的序列将始终以11
结尾,因此位于S中。01
可能只会跟随另一个1
,因为0
会010
。这以11
结束,因此是有效的S. 00
后面只能跟11
,0000
,0001
和0010
都有交替的零。这以11
结束,因此是有效的S. 这告诉我们任何S匹配^(1|011|0011)*$
。但是我们没有完成,因为有一些其他序列对S无效但是它们本身是允许的序列,因此可以连接到S。
0
00
01
001
000
是不被允许的,而且任何更长的要么是在S中,要么本身是不允许的。
所以整个正则表达式匹配允许的序列是:
^(1|011|0011)*(|0|00|01|001)$
这是零个或多个S序列,可选地随后是我们允许的非S序列之一。