1

私はRubyが初めてで、1つの簡単な演習をしようとしていました. 配列内で最長の対称範囲を見つける必要があります。私のコードは次のとおりです。

index_start = index_end = nil
max_length = 0
array = [1,2,3,4,5,6,6,5,4,3,2,1]
length = array.length
array.each_with_index do |outer_element, outer_index|
  array.reverse.each_with_index do |inner_element, inner_index|
    if outer_element.eql? inner_element
      end_index = length - 1 - inner_index
      tmp_array = array[outer_index..end_index]
      if tmp_array.eql? tmp_array.reverse and max_length < tmp_array.length
        index_start, index_end = outer_index, end_index
        max_length = tmp_array.length
      end
    end
  end
end
print max_length, "\n"
print index_start,' ', index_end, "\n"
unless max_length.eql? 0
  print array[index_start..index_end]
end

問題はこれです: 内側のループによる 2 回目の反復の後、inner_index変数は 11 に等しくなりますが、1 でなければならず、これはif outer_element.eql? inner_elementステートメントの後で発生しています。

私は自分が間違っていることについて少し混乱しています。

英語とRubyはすみません、どちらも初心者です。助けてくれてどうもありがとう!

4

1 に答える 1

0

あなたは欠けています

max_length = tmp_array.length

新しい最長の対称サブアレイを見つけた場合。

現在のコードでは、max_lengthは常に 0 であり、最後の 1 要素のサブ配列 ( [1]) は対称であり、0 よりも長くなっています。

したがって、コードは次のようになります。

...
if tmp_array.eql?tmp_array.reverse and max_length < tmp_array.length
  index_start, index_end = outer_index, end_index
  max_length = tmp_array.length
end
...
于 2012-09-25T17:13:31.800 に答える