アナグラムのアルゴリズム

新しいサービスとかに登録するとき、
悩むというかいらいらするのはアカウント名。
いつも使っているアカウントがすでに使用されていたりして
何か違うアカウントを使いたくなったりするのも、ままある話。


私が今回はてなに登録したのはhelmokとかいう
アカウント名ですが、これは名前とかそのほか
謎の文字列を並べ替えて
何となく単語っぽくなっているところを切り出して作りました。


テキトーにPHPでこんな感じ?

<?php
$str = "hoge";
$array = str_split($str);
for($i = 0; $i < 100; $i++){
	shuffle($array);
	echo join('',$array)."<br>";
}
?>

別にコードを上げるほどのものでも全然ないわけですが、
はてダの動作確認もかねて。


あまり関係ないというかこっちが本題なんですが、
最近読んでいる『珠玉のプログラミング』の最初の方に
アナグラムを見つけるアルゴリズムというのが載っています。
たとえばhoge,hog,hoeg,ohhg,ogehのなかからhogeアナグラムを見つけるとして
やはりこんな感じ。

<?php
$array = array("hoge", "hog", "hoeg", "ohhg", "ogeh");
$key = "hoge";

$sort_key = sortStr($key);
foreach($array as $check){
	if($sort_key === sortStr($check)){
		echo $check."<br>";
	}
}
function sortStr($str){
	$array = str_split($str);

	sort($array);
	return join('',$array);
}
?>


そういえば、
私はありがちな感じでだいたいPHPJavaScriptPerlJavaとか使います。
最近はiPhone用アプリを作っているのでObjective-Cも書きますが。