LoginSignup
0
0

More than 5 years have passed since last update.

PHP アナグラムを見つける sort関数で条件を揃えて比較する

Posted at

今回挑戦するプログラミング問題

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で回していく
  • 取り出した文字列を分割して配列を作る→ソート②
  • ①と②を比較して同じものだけ新しく配列に追加する
0
0
0

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
0
0