在Python中进行两次加倍,反转和交换后的模式

假设我们有一个数字n,我们从该序列中找到了第n个值。顺序如下-

  • xxy

  • xxyxxy

  • xx

  • y

  • xyyxyyxyyxyy

  • ...

要生成下一个值,我们必须遵循以下规则,以xxy作为第一项-

  • 当我们在模式的开头时,将其加倍(将字符串与其自身连接起来)。

  • 当最后一个操作加倍时,将其反转。

  • 当最后一个操作反转时,将所有xs与ys交换,反之亦然。

  • 重复这些步骤。

因此,如果输入类似于n = 5,则输出将为“ yyxyyxyyxyyx”

为了解决这个问题,我们将遵循以下步骤-

  • i:= 0

  • ret:=“ xxy”

  • 当我<n时

    • new_stringy:=空字符串

    • 对于ret中的每个c,执行

    • ret:= new_stringy

    • new_stringy:= new_stringy连接“ x”

    • new_stringy:= new_stringy连接“ y”

    • 如果c与“ x”相同,则

    • 除此以外,

    • ret:= ret从索引0到end-1的子数组

    • ret:= ret + ret

    • 如果我的mod 3等于0,那么

    • 否则当我mod 3与1相同时

    • 除此以外,

    • 我:=我+ 1

    • 返回ret

    让我们看下面的实现以更好地理解-

    示例

    class Solution:
       def solve(self, s):
          i = 0
          ret = "xxy"
          while i < s:
             if i % 3 == 0:
                ret += ret
             elif i % 3 == 1:
                ret = ret[::-1]
             else:
                new_stringy = ""
                for c in ret:
                   if c == "x":
                      new_stringy += "y"
                   else:
                      new_stringy += "x"
                   ret = new_stringy
                i += 1
          return ret
    ob = Solution()print(ob.solve(5))

    输入项

    5

    输出结果

    yyxyyxyyxyyx