ふたつの文字列を比較して、両文字列がアナグラムであるかの判断をするコードを以下に記述しました。アナグラムであるかの判断を行うため両文字列を昇順(降順)に並べ替えて一致するかどうかをみています。
もっと簡便に求める方法はありますか?
また、もっとコードを綺麗にするためには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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/28 12:31