LoginSignup
1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-05-03

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

問題
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を使うやり方もコメントで頂きましたが、そちらはサンプルコードまで頂いたので気になる方はぜひコメント欄をご覧ください!!!

1
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0