所以,这是决赛时间,我在一次旧考试中遇到了这个问题:
提供一个表示diff(x)
的正则表达式,其中:
- diff(x) is the number of 1's in x minus the number of 0's in x
- 1 <= diff(x) <= 3
e.g。
diff(10110100111) = 7-4 = 3
diff(11100011) = 5-3 = 2
diff(10011) = 3-2 = 1
答案 0 :(得分:2)
不应该根据需要构建正则表达式。如果你有一个有限状态自动机必须实现一个无界计数器,以区分输入0^n1^n111
和0^n1^n1111
。显然这至少在理论方面是无法实现的(但是,如果x
的任何前缀中的1和0的数量之间的差异由常数限制,则可以实现。)
在实践中可能无关紧要,因为几乎每个常见的正则表达式引擎都比正则表达式识别器更强大,但它可能与考试问题相关。
答案 1 :(得分:1)
不确定您正在寻址的正则表达式引擎,您需要一个具有一些递归支持的引擎,例如.NET(平衡组)或PCRE(递归)。以下是有效的,适用于.NET:
^((?<-Z>1)|(?<-O>0)|(?<O>1)|(?<Z>0))*$(?<-O>)(?<-O>)?(?<-O>)?(?(O)(?!))(?(Z)(?!))