4

我想在 php 中构建一个数组,其中包含单词的所有可能的大写排列。所以它会是(伪代码)

function permutate($word){
  for ($i=0; $i<count($word); $i++){
    ...confused here...
    array_push($myArray, $newWord)   
  }
  return $myArray;
}

所以说我输入“学校”我应该得到一个数组

{学校,学校,学校,学校,学校,......学校}

我知道将字符串或第一个字符大写的函数,但我真的很难做到这一点。

4

1 回答 1

9

这应该为你做:

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;
}

键盘演示

但是,对于您的特定用例,可能会有更好的解决方案。因为有2^n一串长度的排列n。在更长的字符串上运行它(甚至使用任何方法生成所有这些字符串)是不可行的。

实际上,如果您想进行不区分大小写的匹配,您可能应该在散列字符串之前将字符串转换为一种特定的大小写,然后再将它们存储到数据库中。

于 2013-04-27T04:32:30.050 回答