我正在尝试比较给定字符串中的字符,以查看是否存在重复项,如果要删除两个字符,则将字符串尽可能减小。例如。("ttyyzx")等于("zx")
我试过转换数组中的字符,然后使用#each_with_index来遍历字符。
arr = ("xxyz").split("")
arr.each_with_index do |idx1, idx2|
if idx1[idx2] == idx1[idx2 + 1]
p idx1[idx2]
p idx1[idx2 + 1]
end
end
Run Code Online (Sandbox Code Playgroud)
此时,我只希望能够在循环内打印数组中的下一个字符,因此我知道可以继续进行下一步,但是无论我使用什么代码,它都只会打印出第一个字符"x"。
要仅保留唯一字符(ggorlen的答案为“ b”):计算所有字符,仅查找出现一次的字符。我们依靠Ruby的Hash按插入顺序生成密钥。
def keep_unique_chars(str)
str.each_char.
with_object(Hash.new(0)) { |element, counts| counts[element] += 1 }.
select { |_, count| count == 1 }.
keys.
join
end
Run Code Online (Sandbox Code Playgroud)
仅删除相邻的重复对象(ggorlen的答案是“ aba”):替换相邻重复的正则表达式可能是首选方法。
def remove_adjacent_dupes(str)
str.gsub(/(.)\1+/, '')
end
Run Code Online (Sandbox Code Playgroud)
如果不使用正则表达式,则可以slice_when在字符更改时剪切数组,然后删除太长的组。有人可能认为flatten之前需要a join,但join不在乎:
def remove_adjacent_dupes_without_regexp(str)
str.each_char.
slice_when { |prev, curr| prev != curr }.
select { |group| group.size == 1 }.
join
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |