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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP