构造DFA状态图疑问:正则表达式a*b*的具体含义是什么?
a*b*的含义说明
a*b*是正则表达式的标准写法,在你当前问题的上下文里,默认字母表为{a,b},具体规则如下:
- 符号
*是克林闭包运算符,a*代表由任意数量(包括0个)字符a拼接形成的所有串的集合,比如空串ε、a、aa都属于a*的范畴;同理b*是任意数量(包括0个)字符b拼接形成的串集合。 a*b*是两个集合的拼接运算结果,代表所有前面为任意个a、后面为任意个b,且全程没有b出现在a之前的串。
符合a*b*的典型串包括:空串ε、全a串(如aaaa)、全b串(如bbbb)、前a后b的混合串(如aabbb、ab)。
不符合a*b*的串判定规则非常简单:只要串里出现了b之后跟着a的结构,就不属于a*b*,比如ba、aba、aabba、bbba都属于你当前约束要求的合法串。
对应DFA构造提示
你要实现的是接受所有不在a*b*中串的DFA,本质只需要检测输入串是否存在「b后接a」的特征:只要检测到这个特征就进入接受态,后续不管输入什么字符都保持接受态即可,逻辑非常简洁。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

