【Leetcode】899. Orderly Queue 899. 有序队列

【Leetcode】899. Orderly Queue 899. 有序队列_第1张图片

解法

数学解法
首先,假如能够证明序列里任意相邻字母都可以交换,那肯定可以直接排出最小值

  • K>1时,我们想交换S[i]S[i+1],那么操作出S[i:]+S[:i],然后,由于K至少为2,所以这时候可以先把S[i+1]放到后面去,变成S[i]+S[i+2:]+S[:i]+S[i+1],然后再放S[i],得到S[i+2:]+S[:i]+S[i+1]+S[i],最后再依次把S[i+2:]这部分移回去就好,得到S[:i]+S[i+1]+S[i]+S[i+2:],完成交换
  • K=1时,就不行了,我们只能得到S的rotation,从里面找一个最小的就好
class Solution(object):
    def orderlyQueue(self, S, K):
        """
        :type S: str
        :type K: int
        :rtype: str
        """
        if K>1:
            return "".join(sorted(S))
        ans = S
        n = len(S)
        for i in xrange(1,n):
            ans = min(ans,S[i:]+S[:i])
        return ans

你可能感兴趣的:(Leetcode)