本文主要是介绍【Leetcode】899. Orderly Queue 899. 有序队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解法
数学解法
首先,假如能够证明序列里任意相邻字母都可以交换,那肯定可以直接排出最小值
- 当
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 = Sn = len(S)for i in xrange(1,n):ans = min(ans,S[i:]+S[:i])return ans
这篇关于【Leetcode】899. Orderly Queue 899. 有序队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!