找到字符串中最长的子字符串

kir*_*rqe 1 ruby

我想在字符串中找到最长的重复字符序列.

例如:

"aabbccc" #=> ccc
"aabbbddccdddd" #=> dddd
Run Code Online (Sandbox Code Playgroud)

等等

在第一个例子中,ccc是最长的序列,因为c重复3次.在第二个例子中,dddd是最长的序列,因为d重复4次.

它应该是这样的:

b = []
a.scan(/(.)(.)(.)/) do |x,y,z|
    b<<x<<y<<z if x==y && y==z
end
Run Code Online (Sandbox Code Playgroud)

但我想,有一些标志可以保持重复次数

Bro*_*tse 6

这应该工作:

string = 'aabbccc'
string.chars.chunk {|a| a}.max_by {|_, ary| ary.length}.last.join
Run Code Online (Sandbox Code Playgroud)

更新:

解释|_, ary|:此时我们有2个元素数组的数组.我们只需要使用第二个,我们忽略第一个.相反,我们做|char, ary|一些IDE会抱怨未使用的局部变量.放置_告诉ruby忽略该值.

使用正则表达式:

我们可以用正则表达式来实现同样的目的:

string.scan(/([a-z])(\1*)/).map(&:join).max_by(&:length)
Run Code Online (Sandbox Code Playgroud)