我正在字符串中创建一个排列且唯一的字母数组,只是为了按字母顺序对它们进行排序并找到集合中的中间元素。
def middle_permutation(string)
length = string.length
permutation_set = string.split("").permutation(length).to_a.map{|item| item.join}.sort
permutation_set.length.even? ? permutation_set[(permutation_set.length)/2-1] : permutation_set[(permutation_set.length/2)+1]
end
例如:
middle_permutation("zxcvbnmasd") should equal "mzxvsndcba"
即使对于小字符串(N >=10),计算也需要很长时间才能完成,而且我可以忘记任何双倍的事情;有没有更快的方法?
最佳答案
我假设这些字母是唯一的,就像OP的问题一样。
- 排序
- 取出已排序字符串的中间字母(向下舍入)。这是中间排列的第一个字母。
- 如果原始列表有偶数个字母,则其余排列是剩余字母的逆排序。
- 如果不是,则再次取中间的字母。现在剩下的结果是剩余字母的逆排序。
关于ruby - 字符串排列需要很长时间才能解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44034273/