Python 中的双倍、反转和交换模式


假设我们有一个数字 n,我们需要找到序列中的第 n 个值。序列如下所示:

  • xxy
  • xxyxxy
  • yxxyxx
  • xyyxyy
  • xyyxyyxyyxyy
  • ...

为了生成下一个值,我们必须遵循以下规则,从 xxy 作为第一项开始:

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

  • 当上次操作是加倍时,将其反转。

  • 当上次操作是反转时,将所有 x 与 y 交换,反之亦然。

  • 重复这些步骤。

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

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

  • i := 0
  • ret := "xxy"
  • 当 i < n 时,执行以下操作:
    • 如果 i mod 3 等于 0,则
      • ret := ret + ret
    • 否则,如果 i mod 3 等于 1,则
      • ret := ret 的子数组(从索引 0 到末尾)
    • 否则,
      • new_stringy := 空字符串
      • 对于 ret 中的每个字符 c,执行以下操作:
        • 如果 c 等于 "x",则
          • new_stringy := new_stringy 连接 "y"
        • 否则,
          • 否则
      • new_stringy := new_stringy 连接 "x"
    • ret := new_stringy
  • i := i + 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

Arnab Chakraborty

更新于:2020年9月22日

Python 中反转字符串

启动您的职业生涯

通过完成课程获得认证
打印页面
© . All rights reserved.