Python 實現執行長度字串解碼迭代器類的程式


假設我們想要定義一個迭代器類,它使用執行長度編碼的小寫字串(例如 s)進行構造,這個迭代器有兩個函式:

  • next():查詢迭代器中的下一個元素。
  • hasnext():檢查下一個元素是否存在。

所以,如果輸入像 s = "2b1a",則使用 s 構造一個物件,然後呼叫 next()、hasnext()、next()、next()、hasnext(),那麼輸出將是 "b"、True、"b"、"a"、False。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個建構函式。它將接收 s。
  • output := 一個新的列表
  • num := 空字串
  • 對於 s 中的每個 i,執行以下操作:
    • 如果 i 是字母,則:
      • 將 num 插入到 output 的末尾。
      • 將 i 插入到 output 的末尾。
      • num := 空字串
    • 否則:
      • num := num + i
  • 定義一個函式 next()。
  • 如果 hasnext() 為真,則:
    • count := output[0]
    • letter := output[1]
    • count := count - 1
    • 如果 count > 0,則:
      • output[0] := output[0] - 1
    • 否則:
      • output := output[從索引 2 到結尾]
    • 返回 letter
  • 定義一個函式 hasnext()。
  • 如果 output 的大小不為 0,則:
    • 返回 True
  • 返回 False

示例

讓我們看看下面的實現來更好地理解:

class RunLengthIterator:
   def __init__(self, s):
     self.output = []
     num = ""
     for i in s:
         if i.isalpha():
            self.output.append(int(num))
            self.output.append(i)
            num = ""
         else:
            num += i

   def next(self):
      if self.hasnext():
         count = self.output[0]
         letter = self.output[1]
         count -= 1
         if count > 0:
            self.output[0] -= 1
         else:
            self.output = self.output[2:]
         return letter

   def hasnext(self):
      if len(self.output) != 0:
         return True
      return False

s = "2b1a"
obj = RunLengthIterator(s)
print(obj.next())
print(obj.hasnext())
print(obj.next())
print(obj.next())
print(obj.hasnext())

輸入

"2b1a"
obj = RunLengthIterator(s)
obj.next()
obj.hasnext()
obj.next()
obj.next()
obj.hasnext()

輸出

b
True
b
a
False

更新於: 2021年10月14日

184 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告