在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中所有字母的列表的元组的新列表
- while 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
- while i < input_sorted的长度, 执行以下操作
- val:input_sorted[i, 0]
- temp1:[input_sorted[i,1]]
- j:i + 1
- while j < input_sorted的长度,且input_sorted[j,0]等于val时,执行以下操作
- 在temp1的末尾插入input_sorted[j,1]
- 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