Tip:
Highlight text to annotate it
X
好的,让我们一起来解决
为了查找是否有一条流出的边界,我们只需要检查
在edges是否有元组(current, letter)
如果有,我们的目标状态就可以通过查找edges中的元组(current, letter)
来获得
我们已经有了letter,字符串里的第一个元素
所以我们只想要第一个字符,其他的保留下来
例如,如果输入是aaa111,我们用了a
所以我们希望字符串变为aa111
我们只要递归地调用自身,对剩下的字符串使用该函数
从目标节点开始
而edges和接收状态都不变
不然,我们离开有限状态机并返回false
好了,关键时刻到了
我们想打印出这个答案
噢!正如我们想的,aaa111能够被接受
如果我尝试混合并改写成如a1a1a1的字符串,会怎样呢?
这应该不被我们的有限状态机接受
而确实是这样,输出变为了false
空字符串怎样呢?能被接受吗?
它不能被接受,因为我们查找的是a+1+,所以这也应该是false
而确实是这样,但是我们接受的最小字符串a1,结果是怎样呢?
这个就被接受了,非常好!
所以我们可以检查任意的有限状态机来查看它是否接受一个字符串
在我们解题的过程中,你可能已经注意到
edges和接受状态从来不改变的
我在文件的开头部分定义了它们
所以我们的有限状态机模拟器只对输入和当前状态进行递归
而这符合我们的直觉,因为那两个就是我在纸面上
进行查找的“手指”