字符串中连续字符的最大出现次数。(Ruby)

时间:2013-07-25 07:33:10

标签: ruby-on-rails-3

如何找出字符串中连续字符的最大出现次数,并按排序顺序将结果作为数组返回。

示例:

    input = “abcccdddeee”
    output = [“c”,”d”,”e”]

1 个答案:

答案 0 :(得分:1)

这很粗糙,很可能会有所改进,但你基本上是在看一个简单的状态机,当前状态是前一个字符,下一个状态是复位或计数器的增量。

str = "abcccdddeee"

state = nil
current_count = 0
counts = {}
str.each_char do |char|
  if state == char
    current_count += 1
    counts[char] ||= 0
    counts[char] = current_count if current_count > counts[char]
  else
    current_count = 0
  end
  state = char
end

p counts.to_a.sort {|a, b| b[1] <=> a[1] }.map(&:first)

由于这只会在当前输入导致FSM保持计数状态时计数和存储计数,因此输出中不会出现非重复字符。

但是,由于这是Ruby,我们可以欺骗并使用正则表达式:

"abccdddeee".scan(/((.)\2{1,})/).map(&:first).sort_by(&:length).map {|s| s[0] }