Ruby

順番が変わってしまった文字列を元に戻そう

今日はプログラミングの問題を解いてみました。

問題

2つの文字列が与えられる。

1つ目は一見するとよくわらない文字列、2つ目には1つめの文字列の最後尾を何回か先頭に持ってくるとできる意味のある文字列

文字列の最後尾を何回先頭に持って来れば2個目の文字列になるかを出力する

例 'byru', 'ruby' => 2回

僕の解答

def rotation_str(str1,str2)

str1_array = str_to_array(str1)
i = 0
while str1_array.join != str2
rotation(str1_array)
i += 1
end
i
end
#文字列を分割して配列に入れるメソッド
def str_to_array(str)
str.split('').map { |s| s }
end
#要素の最後を先頭に持ってくるメソッド
def rotation(array)
array.prepend(array[-1]).delete_at(-1)
end

このような解答になりました!!

もっとこうすれば良くなるよといったアドバイスがあればぜひコメントをして頂きたいです!!!

追記

Str#chars,Str#rotateという便利なメソッドを教えて頂いたのでそれを基にリファクタリングをしてみました。

def rotation_str(str1,str2)

i = 0
rotate_str = ''
while rotate_str != str2
if rotate_str.empty?
rotate_str = rotate_join(str1)
else
rotate_str = rotate_join(rotate_str)
end
i += 1
end
i
end

def rotate_join(str)
str.chars.rotate(-1).join
end

while文内でjoinしても破壊的ではなく無限ループになるので変数に格納することにしました。

また、他にもrindexを使うやり方もコメントで頂きましたが、そちらはサンプルコードまで頂いたので気になる方はぜひコメント欄をご覧ください!!!