双端队列-有序队列

有序队列

题目内容

一开始给出了一个由小写字母组成的字符串 S。我们规定每次移动中,选择最左侧的字母,将其从原位置移除,并加到字符串的末尾。这样的移动可以执行任意多次返回我们移动之后可以拥有的最小字符串(注:在Python3中,字符串的大小可用不等号比较)。


代码

from pythonds.basic.deque import Deque  # 为了便于操作数据,避免引入更多结构

def func(S):
    print(type(S))
    nq = Deque()
    for each in S:  # 输入数据
        nq.addFront(each)
    nq.addFront(nq.removeRear())
    temp = ""
    min = S
    length = len(S)
    for i in range(length):
        s = nq.removeRear()
        nq.addFront(s)  # 保证队列不变
        temp = temp + s  # 字符串没有append方法,直接相加即可
    # print(temp)
    for i in range(length-1):  # 比较, 比较的次数不会超过字符串的长度
        if temp < min:
            min = temp            
        nq.addFront(nq.removeRear())  # 移动且每轮循环都要执行
        temp = ""
        for i in range(length):
            s = nq.removeRear()
            nq.addFront(s)
            temp = temp + s
        # print(temp)
    output = min
    return output
     
S = eval(input())
print(func(S))

原文地址:https://www.cnblogs.com/SKEZhi/p/13346189.html