我想用php构建一个数组,它包含一个单词的所有可能的大写字母排列。所以应该是(伪代码)
function permutate($word){
for ($i=0; $i<count($word); $i++){
...confused here...
array_push($myArray, $newWord)
}
return $myArray;
}
所以说我上了“学校”我应该把
{学校,学校,学校,学校,学校,……学校}
我知道一些函数可以将字符串或第一个字符大写,但我真的很难做到这一点。
最佳答案
这应该对你有用:
function permute($word){
if(!$word)
return array($word);
$permutations = array();
foreach(permute(substr($word, 1)) as $permutation){
$lower = strtolower($word[0]);
$permutations[] = $lower . $permutation;
$upper = strtoupper($word[0]);
if($upper !== $lower)
$permutations[] = $upper . $permutation;
}
return $permutations;
}
Codepad Demo
但是,对于您的特定用例,可能有更好的解决方案。因为对于长度为
2^n
的字符串有n
置换。在一个长得多的字符串上运行(甚至使用任何方法生成所有这些字符串)都是不可行的。实际上,如果您想进行不区分大小写的匹配,那么在对字符串进行哈希运算之前,在将它们存储到数据库中之前,您可能应该将字符串转换为一个特定的大小写。