質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2484閲覧

Rubyでアナグラムを求めるコード

icuu0608

総合スコア10

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2015/01/27 23:31

ふたつの文字列を比較して、両文字列がアナグラムであるかの判断をするコードを以下に記述しました。アナグラムであるかの判断を行うため両文字列を昇順(降順)に並べ替えて一致するかどうかをみています。
もっと簡便に求める方法はありますか?
また、もっとコードを綺麗にするためにはRubyの○○な機能を用いた方がよい、等はありませんか?

lang

1#-*- coding: utf-8 -*- 2#2つの文字列が与えて、片方がもう片方の並び替え(アナグラム)に 3#なっているかどうかを判断する 4class Anagrams 5 def initialize 6 #整列した文字列を格納する変数 7 @str_new ="" 8 end 9 10 #文字列を並び替えて整理する 11 def sort_string(str) 12 i = 0 13 str.each_char do |char1| 14 #重複文字配列 15 k = Array.new 16 #大小チェックフラグ 17 flag = true 18 j = 0 19 str.each_char do |char2| 20 if i != j then 21 if char1 > char2 then 22 flag = false 23 elsif char1 == char2 then 24 k << j 25 end 26 end 27 j += 1 28 end 29 if flag == true then 30 @str_new << char1 31 if k.size > 0 then 32 k.each {|index| @str_new << char1 } 33 end 34 s = str 35 s.slice!(i) 36 if k.size > 0 then 37 k.each {|index| s.slice!("#{char1}") } 38 end 39 sort_string(s) 40 return @str_new 41 end 42 i += 1 43 end 44 end 45end 46 47puts "対象文字列1 = " 48char1 = gets.chomp 49puts "対象文字列2 = " 50char2 = gets.chomp 51ana1 = Anagrams.new 52ana2 = Anagrams.new 53comChar1 = ana1.sort_string(char1) 54comChar2 = ana2.sort_string(char2) 55if comChar1 == comChar2 then 56 puts "対象文字列はアナグラムです" 57else 58 puts "対象文字列はアナグラムでは有りません" 59end 60

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

下記でどうでしょう?

lang

1def anagram?(a, b) 2 a.chars.sort == b.chars.sort 3end 4 5p anagram? 'tester', 'street' # true 6p anagram? 'hoge', 'fuga' # false

投稿2015/01/28 00:43

k.tada

総合スコア1679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

icuu0608

2015/01/28 12:31

ものすごくシンプルになりました!
guest

0

String#splitで、引数として空文字列を与えれば、1文字ごとに切り出して配列へ変換することができます。あとはArray#sortを使って並べ替えて、Array#==で比較すれば(要素ごとに==で比較します)目的を達成できます。

投稿2015/01/28 00:15

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

icuu0608

2015/01/28 12:37

str = "hogehoge" strArray = Array.new strArray = str.split('') strArray.sort シンプルになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問