📜  设计图灵机以反转由a和b组成的字符串

📅  最后修改于: 2021-08-25 10:33:38             🧑  作者: Mango

先决条件:图灵机

任务 :
我们的任务是设计一种图灵机,以反转由a和b组成的字符串。

例子 :

Input-1 : aabb
Output-1 : bbaa

Input-2 : abab
Output-2 : baba

方法 :
基本思想是从右向左读取输入,并用字母替换Blank(B)并用“ X”替换字母。当我们读取所有的a和b时,将所有的’X’替换为Blank(B),然后得到所需的字符串。

让我们以“ aabb”为例来了解这种方法。

  1. 第一个任务是我们必须将指针指向右边,以便我们可以从右到左读取字符串。为此,我们从左到右读取所有的a和b,当我们得到第一个Blank(B)时,我们将指针向左转,然后得到最右边的字符。
  2. 现在将有两种情况–
    • 我们得到的字符是“ a”。
    • 我们得到的字符是“ b”。
  3. 在此示例中,我们将第一个字符设为“ b”,即aabb的最后一个字符。我们将b替换为“ X”,并使其为Blank(B)。多余的空白将自动添加到末尾。我们的字符串看起来像这样–

  4. 现在我们必须得到第二个字符。为此,我们将指针从右移到左并移动,直到在“ X”之后得到“ a”或“ b”。在这种情况下,我们得到“ b”。现在,我们重复相同的任务,即,将X替换为’b’,然后将指针从该位置向右移动,直到获得Blank(B)。当我们得到一个Blank(B)时,将其替换为在这种情况下得到的字符’b’,而Black(B)将自动在末尾追加。我们的字符串看起来像这样–

  5. 现在我们必须得到第三个字符。为此,我们将指针从右移到左并移动,直到在“ X”之后得到“ a”或“ b”。在这种情况下,我们得到“ a”。现在,我们重复相同的任务,即用X替换“ a”,然后将指针从该位置向右移动,直到获得Blank(B)。当我们得到一个Blank(B)时,将其替换为在这种情况下得到的字符“ a”,而Black(B)将自动在末尾追加。我们的字符串看起来像这样–

  6. 同样,我们得到的最后一个字符是“ a”,并且执行与上述步骤中描述的相同的任务。我们的字符串将如下所示–

  7. 现在我们已经看到我们遍历了所有四个字符,并以“ bbaa”的顺序获得了该字符,这与“ aabb”的顺序相反,即,删除所有的“ X”之后,便获得了所需的字符串。
  8. 要删除所有的“ X”,我们将所有的“ X”替换为Blank(B),即在替换“ X”后得到4个Blank(B),这等效于一个Blank(B)。这意味着我们得到了最终的字符串。

图灵机: