ruby - 字符串排列需要很长时间才能解决

标签 ruby algorithm

我正在字符串中创建一个排列且唯一的字母数组,只是为了按字母顺序对它们进行排序并找到集合中的中间元素。

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的问题一样。

  1. 排序
  2. 取出已排序字符串的中间字母(向下舍入)。这是中间排列的第一个字母。
  3. 如果原始列表有偶数个字母,则其余排列是剩余字母的逆排序。
  4. 如果不是,则再次取中间的字母。现在剩下的结果是剩余字母的逆排序。

关于ruby - 字符串排列需要很长时间才能解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44034273/

相关文章:

ruby-on-rails - 如何在两个日期之间生成随机日期和时间?

c# - 完美权力检查

java - 如何将 btree 转换为 b+tree

java - 以下程序的时间复杂度

ruby-on-rails - 在不使用 Rails 迁移的情况下更新数据库模式

ruby-on-rails - 如何更改包含另一个模型对象的 Rails 模型对象变量名称

ruby - 混淆何时在 Ruby 中使用括号与 block

ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境?

algorithm - 拉宾的最近邻(最近的一对点)算法?

java - 试图实现一个简单的算法