L = {a n b m a (n+m) | n,m≥1} 代表一种我们只使用 2 个字符的语言,即 a 和 b。语言的第一部分可以是任意数量的“a”(至少为 1)。第二部分是任意数量的“b”(至少为 1)。语言的第三部分是“a”的数量,其计数是字符串第一部分中 a 的计数和字符串第二部分中 b 的计数之和。任何属于此类别的字符串都将被该语言接受。字符串的开头和结尾用 $ 符号标记。
例子:
Input : a a b b b a a a a a // n=2, m=3
Output : Accepted
Input : a a b a a a a // n=2, m=1
Output : Not accepted
使用的方法——
- 将第一部分中的“a”转换为“X”,然后忽略所有中间符号向右移动。当在“b”之后遇到“a”时,将其转换为“Z”并向左移动并停在“X”旁边的位置。重复上述过程。
- 当第一部分中的所有 a 都被转换后,对第二部分应用相同的过程。在第三部分将“b”转换为“Y”,将“a”转换为“Z”。
当整个第一和第二部分都被转换,如果第三部分也被转换,那么字符串将被接受,否则将不被接受。
脚步 –
Step-0:将“a”转换为“X”,向右移动进入状态1。如果符号是“b”,忽略它,向右移动进入状态4。
Step-1:如果符号是“a”,忽略它并向右移动,保持相同状态。如果符号是“b”,忽略它,向右移动并转到状态 2。
Step-2:如果符号是“Z”,忽略它并向右移动,保持相同状态。如果符号是“b”,忽略它并向右移动,保持相同的状态,如果符号是“a”,则将其转换为“Z”,向左移动并转到状态3。
Step-3:如果符号是“Z”,忽略它并向左移动,保持相同状态。如果符号是“b”,忽略它并向左移动,保持相同状态。如果符号是“a”,忽略它向左移动,保持相同状态,如果符号是“X”,忽略它向右移动,进入状态0。
Step-4:如果符号是“b”,忽略它向左移动,进入状态5,如果符号是“Z”,忽略它向左移动,进入状态5。
Step-5:将“b”转换为“Y”,向右移动进入状态6,如果符号是“Z”,忽略它向右移动,进入状态8。
Step-6:如果符号是“Z”,忽略它并向右移动,保持相同状态。如果符号是“b”,则忽略它并向右移动,保持相同状态,如果符号是“a”,则将其转换为“Z”,向左移动并转到状态7。
Step-7:如果符号是“Z”,忽略它并向左移动,保持相同状态。如果符号是“b”,忽略它向左移动,保持相同状态,如果符号是“Y”,忽略它向右移动,进入状态5。
Step-8:如果符号是“Z”,忽略它向右移动,保持相同状态,如果符号是“$”,忽略它向左移动,转到状态9。
步骤 9:接受字符串