Python中索引處的解碼字串


假設給定一個編碼字串S。我們必須找到並將解碼後的字串寫入磁帶,這裡編碼字串一次讀取一個字元,並執行以下步驟:

  • 如果讀取的字元是字母,則該字母直接寫入磁帶。
  • 如果讀取的字元是數字,則整個當前磁帶將重複寫入數字-1次。

現在,如果給定某個編碼字串 S 和索引 K,則查詢並返回解碼字串中的第 K 個字母(從 1 開始索引)。

因此,如果字串是“hello2World3”,k = 10,則輸出將是“o”。這是因為解碼後的字串將是“hellohelloWorldhellohelloWorldhellohelloWorld”,所以第 10 個字元是“o”。

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

  • size := 0
  • 對於字串s中的每個i
    • 如果i是數字字元,則size := size * i的整數值,否則size := size + 1
  • 對於s長度-1到0的範圍內的i
    • k := k mod size
    • 如果s[i]是數字且k = 0,則返回s[i]
    • 如果s[i]是數字,則size減1,否則size := size / s[i]的整數值
  • 返回空字串

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

示例

線上演示

class Solution(object):
   def decodeAtIndex(self, s, k):
      """
      :type S: str
      :type K: int
      :rtype: str
      """
      size = 0
      for i in s:
         if i.isdigit():
            size *= int(i)
         else:
            size += 1
      #print(size)
      for i in range(len(s) - 1, -1, -1):
         k %= size
         if s[i].isalpha() and k == 0:
            return s[i]
         if s[i].isalpha():
            size -=1
         else:
            size /= int(s[i])
      return ""
ob = Solution()
print(ob.decodeAtIndex("hello2World3", 10))

輸入

"hello2World3"
10
ob.decodeAtIndex("hello2World3", 10)

輸出

o

更新於:2020年4月30日

瀏覽量155次

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告