用 Python 编写程序,在合成字符串中找出特定索引处的字母

pythonserver side programmingprogramming更新于 2025/12/18 16:12:17

假设,我们得到了一个字符串"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 相同,则执行
        • 在 temp1 末尾插入 input_sorted[j, 1]
        • j := j + 1
      • 在 stk_list 末尾插入 (pre+val, temp1)
      • 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

相关文章


有用资源