0

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

例子:

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

1 回答 1

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] }
于 2013-07-25T09:17:30.250 回答