3

こんにちはみんな私は次の問題を抱えています:

入力
2
ababaa
aa

出力
11
3

説明:
最初のケースでは、ストリングのサフィックスは「ababaa」、「babaa」、「abaa」、「baa」、「aa」、および「a」です。これらの各文字列と文字列「ababaa」との類似点は、それぞれ6,0,3,0,1,1です。したがって、答えは6 + 0 + 3 + 0 + 1 + 1=11です。

2番目のケースの場合、答えは2 + 1=3です。

この部分は機能しますが、私のコードが合格するはずのテストの一部は機能しません。

これが私のコードです

def input_data
#STDIN.flush
tries = gets.chomp
end

strings=[];
tries = input_data until (tries =~ /^[1-9]$/)
tries = tries.to_i
strings << input_data until (strings.count == tries)

strings.map do |x|
values = 0
current = x.chars.to_a
(0..x.length-1).map do |possition| 
    current_suffix = x[possition..-1].chars.to_a
    (0..current_suffix.length-1).map do |number|
        if (current_suffix[0] != current[0])
            break
        end

        if ( current_suffix[number] == current[number] )
            values = values+1
        end
    end 
  end

  if (values != 0)
    puts values
  end
end

それを修正する方法の提案はありますか?

4

1 に答える 1

10

getsを返しますが、これは編集nilできません。chompしたがって、 を呼び出す前に、実際の文字列で作業していることを確認する必要がありますchomp。Ruby の一般的なイディオムは||=、変数が nil の場合にのみ演算子を使用して変数を設定することです。したがって、次のように記述します。

tries = gets        # get input
tries ||= ''        # set to empty string if nil
tries.chomp!        # remove trailing newline  
于 2012-12-02T09:59:45.803 に答える