2016-08-11 6 views
1

入力された文字列の最長回文部分文字列を返す関数を開発しようとしています。Ruby Longest Palindromeサブストリング関数の奇妙な出力

def longest_palindrome(s) 
    place = 0 
    array = s.chars 
    output = [] 
    while place < s.length 
    output << (array[0]..array[place]).to_a 
    place += 1 
    end 
    return output 
end 

が与えられた文字列「アベバは、」私はへの結果の配列を期待する場合:私は今、各サブセクションは、それは次のようにpalindromeTheコードがあるかどうかを確認するために分析することができるように、文字列を分割するに取り組んでいます次のようになります。

[["a"],["a","b"],["a","b","a"],["a","b","a","b"],["a","b","a","b","a"]] 

しかし、私は、出力配列を返すとき、これは内部に保存されているものです。

[["a"], ["a", "b"], ["a"], ["a", "b"], ["a"], ["a", "b"]] 

この現象が発生する原因となっている私の機能については何?

編集:私はこのために別のトピックを起動する必要がある場合

わかりません。次のように私のコードは以下のようになります。

def longest_palindrome(s) 
array = s.chars 
start = 0 
place = 1 
output = [] 
while start < s.length - 1 
    while place < s.length 
     output << array[start..place] 
     place += 1 
    end 
start += 1 
end 
return output 
end 

私のロジックが、これは、インデックス0から始まる文字列全体が完了するまで、徐々に文字列の1文字以上捉えるということです。次に、索引1で開始し、文字列内の可能なすべての部分文字列を取得するまで同じ処理を行います。ただし、返されるのは:

[["a"],["a","b"],["a","b","a"],["a","b","a","b"],["a","b","a","b","a"]] 

ロジックの瑕疵はどこにありますか?

答えて

3

'a'..'a'のような範囲演算子を使用すると、ちょうど'a'になります。

2つの完全に独立した配列インデックス操作があり、それぞれが範囲から使用される配列から単一の要素(文字)を返します。あなたはいつもaある、array[0]を取得し、abとを交互にarray[place]、および文字はもともとから来た配列とは何の関係もない範囲'a'..'a'と何度も繰り返し'a'..'b'を製造しています。

あなたは、配列から要素を抽出した後範囲を構築し、範囲は配列からを生産することを期待することはできません。正しいサブアレイは、配列のインデックスとして範囲を使用することによって生成されます:array[0..place]。サブ配列が0からplaceまで返されます。

+0

ありがとうございます!完璧な意味合いがあります。 – John