2016-04-07 38 views
0

Yinelenen öğeleri kaldırma işleminden çıkacak karakterlerden yalnızca bir tanesi kalmayıncaya kadar bir dizede her karakter için aynı sayıda çoğaltmanın kaldırılması nasıl mümkün olur? kalan karakterlerden mi?Bir dizedeki her karakter için aynı sayıda yinelenen karakteri kaldırın

Ben bir dize varsa: biz 2 kaldırırsanız

string = "aaaabbbxxxxx44444oooooo9999999" 

Sen, (yani iki b s izledi b var) karakteri b çiftleri az sayı ile karakter olduğunu görüyoruz böylece edebilirsiniz her karakter kümesinden çiftleri, her karakter için kopya sayısını orijinal dizesi kullanılan herhangi karakterleri kaybetmeden ancak minimize olmadan aşağıda sol olurdu:

string = "aabxxx444oooo99999" 

Ayrıca varsayalım bizim dize hiçbir boşluk içerir ve karışık ise:

string_b = "aabb4keekkk447abae777err99r9" 

Önce sen sıralayabilirsiniz:

senin azaltmak çiftleri yöntemi uygulamadan önce:

string_b = "4779aabeekkr" 

cevap

2

Eğer yoksa Orijinal sipariş veya karaktere ihtiyacınız varsa, o zaman şunları yapabilirsiniz:

string_b = "aabb4keekkk447abae777err99r9" 
h = string_b.chars.group_by { |c| c }.map { |c, a| [c, a.size] }.to_h 
#=> {"a"=>4, "b"=>3, "4"=>3, "k"=>4, "e"=>4, "7"=>4, "r"=>3, "9"=>3} 
# #to_h is optional here 

n = h.values.min - 1 
#=> 3 
# use map(&:last) instead of #values if not using #to_h previously 

h.map { |k, v| k * (v - n) }.sort.join 
#=> "4779aabeekkr" 
+1

Ayrıca, ilgili kullanıcıların karakterlerinin sırasını korumak için '.sort 'kodunu son satırdan kaldırabilirsiniz. h.map {| k, v | k * (v - n)} .join # => "aab4kkee77r9" –

1

Bunu bir yönteme koymalısınız.

def convert str 
    return str if str.empty? 
    letter_array = str.chars.group_by {|x| x}.values 
    drop_size = letter_array.map(&:size).min - 1 
    letter_array.map {|x| x.drop drop_size}.join 
end 

çalıştığını emin olmak için

2.2.1 :230 > convert 'aaaabbbxxxxx44444oooooo9999999' 
=> "aabxxx444oooo99999" 
2.2.1 :231 > convert '' 
=> "" 
2.2.1 :232 > convert 'abc' 
=> "abc" 
2.2.1 :233 > convert 'abcabcddd' 
=> "abcdd" 
2.2.1 :234 > convert " " 
=> " " 

çeşitli girişler ile test etmek istiyorum irb konsola (örn boş dize) Bu çalıştırın.

İlgili konular