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.