如何找出字符串中连续字符的最大出现次数,并按排序顺序将结果作为数组返回。
示例:
input = “abcccdddeee”
output = [“c”,”d”,”e”]
答案 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] }