今回挑戦するプログラミング問題
codewars 5級
「Where my anagrams at?」
実現したいこと
与えられた文字列と同じアナグラムを見つける
アナグラムとは、言葉遊びの一つで、単語または文の中の文字をいくつか入れ替えることによって、全く別の意味にさせる遊びである --ウィキペディア
例えば、以下はアナグラムとなる。
'abba' & 'baab' == true
'abba' & 'bbaa' == true
'abba' & 'abbba' == false
'abba' & 'abca' == false
anagram(探したい文字列, アナグラムを含む文字列リスト)
=>引数2の中で、引数1と同じアナグラムを返す
※ない場合は空文字を返す
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada'])
=> ['aabb', 'bbaa']
//2個のアナグラムが見つかった
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer'])
=> ['carer', 'racer']
//2個のアナグラムが見つかった
anagrams('laser', ['lazing', 'lazy', 'lacer'])
=> []
//アナグラムがない場合は空の配列を返す
コーディング
function anagrams(string $word, array $words): array {
$word = str_split($word);
sort($word);
$res = [];
foreach ($words as $key=>$anagram) {
$anagram = str_split($anagram);
sort($anagram);
if($word === $anagram) $res[] = $words[$key];
}
return $res;
}
- 探したい文字列を配列化→ソート①
- 与えられた文字列リストをforeachで回していく
- 取り出した文字列を分割して配列を作る→ソート②
- ①と②を比較して同じものだけ新しく配列に追加する