写一个包含偶数个0或奇数个1的表达式
我把它归结为:
1*(01*01*)* + 0*10*(10*10*)*
其中第一部分表示偶数0,第二部分表示奇数1
但是,应该有一个我没有看到的简化解决方案。有小费吗?
奇数1s部分:0*1(0|10*1)*
Even-0s部分取决于:
(1|01*0)*
(1|01*0)+
1*(01*01*)+
(如在OP中)旧答案:在案例1和案例2下更正
(1*(01*0)*)+ | 0*1(0*(10*1)*)*
感谢@OGHaza提供的有用评论。
利用偶数长度字符串始终满足您的约束这一事实:
^(([01]{2})*|1*(01*01*)*)$
定义“最短”。如果您正在寻找最短的评估时间(即最快),请确保您不使用捕获组。
here's an example in javascript
^(?:1*(?:01*0)*)+|0*1(?:0*(?:10*1)*)*$
显示比使用捕获组的表达式快20%但会给出相同的答案
^(1*(01*0)*)+|0*1(0*(10*1)*)*$
我找到的最简化的解决方案是:
1+0(0+1)((1+0)(1+0))*
用最少的符号,
1*(01*01*)*