Python程式:查詢合成字串中特定索引處的字元


假設,我們給定一個字串 'input_str'。現在,我們需要確定給定字串的所有可能的子字串,然後將所有子字串按字典序一個接一個地連線到另一個字串中。我們還提供了一個整數值 k。我們的任務是從連線後的字串中返回索引 k 處的字元。

因此,如果輸入類似於 input_str = 'pqrs',k = 6,則輸出將為 p

給定字串的按字典序排列的子字串為 p、pq、pqr、pqrs、q、qr、qrs、r、rs、s。

如果我們連線這些字串,它將變成 ppqpqrpqrsqqrqrsrrss。在位置 6 處,字元為 'p'。(索引從 0 開始)。

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

  • stk_list := 一個新的列表,其中包含一個元組,該元組包含一個空字串和 input_str 中所有字元的列表
  • 當 stk_list 不為空時,執行以下操作
    • pre := 從 stk_list 中刪除最後一個元素
    • temp := 從 stk_list 中刪除最後一個元素
    • 如果 k < pre 的大小,則
      • 返回 pre[k]
    • k := k - pre 的大小
    • input_sorted := 一個新的列表,其中包含元組,這些元組包含 input_str 的字元及其在 input_str 中的位置
    • 根據元組的第二個值按降序對列表 input_sorted 進行排序
    • i := 0
    • 當 i < input_sorted 的大小時,執行以下操作
      • val := input_sorted[i, 0]
      • temp1 := [input_sorted[i, 1]]
      • j := i + 1
      • 當 j < input_sorted 的大小且 input_sorted[j, 0] 與 val 相同時,執行以下操作
        • 將 input_sorted[j, 1] 插入到 temp1 的末尾
        • j := j + 1
      • 將 (pre+val, temp1) 插入到 stk_list 的末尾
      • i := j
  • 返回 null

示例

讓我們看看以下實現以獲得更好的理解:

def solve(input_str, k):
   stk_list = [("",list(range(len(input_str))))]
   while stk_list:
      pre, temp = stk_list.pop()
      if k < len(pre):
         return pre[k]
      k -= len(pre)
      input_sorted = sorted([(input_str[i],i+1) for i in temp if i < len(input_str)], reverse=True)
      i = 0
      while i < len(input_sorted):
         val = input_sorted[i][0]
         temp1 = [input_sorted[i][1]]
         j = i + 1
         while j < len(input_sorted) and input_sorted[j][0]== val:
            temp1.append(input_sorted[j][1])
            j += 1
         stk_list.append((pre+val, temp1))
         i = j
   return None

print(solve('pqrs', 6))

輸入

'pqrs', 6

輸出

p

更新於: 2021年10月11日

86 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.