在PHP中,如何生成字符串的所有可能模式?

在PHP中,如何生成字符串的所有可能模式?,php,Php,我有这个代码来生成一个字符串的所有posibilite <?PHP for($i=0;$i< 16;$i++){ echo decbin($i)."<br>"; } ?> 我想要的是将这个二进制数据与一个由4个字母组成的字符串相结合,将所有的字母替换为“*” 因此,当您输入字符串“help”时,您将得到 help hel* he*p he** 等等 我在挣扎 有什么好主意吗 谢谢警告:100%未经测试 $s='hel

我有这个代码来生成一个字符串的所有posibilite

  <?PHP       
  for($i=0;$i< 16;$i++){

    echo decbin($i)."<br>";
  }
  ?>
我想要的是将这个二进制数据与一个由4个字母组成的字符串相结合,将所有的字母替换为“*” 因此,当您输入字符串“help”时,您将得到

help

hel*

he*p

he**
等等

我在挣扎 有什么好主意吗

谢谢警告:100%未经测试

$s='help';
$l = strlen($s)-1;
for($i=0;$i<=$len;$i++){
  $bin=decbin($i);
  $newS = $s;
  foreach(str_split($bin) as $k=>$v) {
    if ($v) {
     $index = $l - $k;
     $newS[$index] = '*';
    }
  }

  echo $newS.'<br>';
}
$s='help';
$l=strlen($s)-1;
对于($i=0;$i$v){
如果有的话(五美元){
$index=$l-$k;
$newS[$index]=“*”;
}
}
echo$newS.“
”; }
一个简单的方法是:

  • pad bincode so 0=>0000

  • 循环bincode,如果bincode[n]=0,则用*替换字[n]


  • 您可以为这个问题编写一个简单的递归算法

    该算法的思想是,您可以查看二进制数,并看到
    0
    表示字符将保持不变,
    1
    表示它将变成星号。每个字符都这样做,因为你有一个4个字符长的单词,你得到了
    2*2*2=16的排列

    该算法遍历单词中的字符,并尝试为每个字符生成一个普通字符和一个星号的排列。结果是当每个字符与其本身相同或被星号覆盖时,单词
    help
    的所有排列

    function asterisk_permutations($str, &$result=array(), $i=0) {
        if ($i >= strlen($str)) {
            $result[] = $str;
            return;
        }
    
        asterisk_permutations($str, $result, $i+1);
        asterisk_permutations(substr_replace($str, '*', $i, 1), $result, $i+1);
    }
    
    asterisk_permutations("help", $result);
    var_dump($result);
    
    输出为:

    array(16) {
      [0]=> string(4) "help"
      [1]=> string(4) "hel*"
      [2]=> string(4) "he*p"
      [3]=> string(4) "he**"
      [4]=> string(4) "h*lp"
      [5]=> string(4) "h*l*"
      [6]=> string(4) "h**p"
      [7]=> string(4) "h***"
      [8]=> string(4) "*elp"
      [9]=> string(4) "*el*"
      [10]=> string(4) "*e*p"
      [11]=> string(4) "*e**"
      [12]=> string(4) "**lp"
      [13]=> string(4) "**l*"
      [14]=> string(4) "***p"
      [15]=> string(4) "****"
    }
    

    你最好用铅笔和一张纸来解决这类问题。我不明白。为什么有人会在没有解释的情况下否决投票?我没有否决投票,但可能是您的代码会导致更长字符串的stackoverflow,而网站的名称是stackoverflow。不,关于最大递归函数调用深度,您可以这样说。@Tiberiu IonuțStan:最大递归深度限制不是PHP的核心功能。内存不足是另一回事,任何脚本都可能成为这一问题的受害者。
    array(16) {
      [0]=> string(4) "help"
      [1]=> string(4) "hel*"
      [2]=> string(4) "he*p"
      [3]=> string(4) "he**"
      [4]=> string(4) "h*lp"
      [5]=> string(4) "h*l*"
      [6]=> string(4) "h**p"
      [7]=> string(4) "h***"
      [8]=> string(4) "*elp"
      [9]=> string(4) "*el*"
      [10]=> string(4) "*e*p"
      [11]=> string(4) "*e**"
      [12]=> string(4) "**lp"
      [13]=> string(4) "**l*"
      [14]=> string(4) "***p"
      [15]=> string(4) "****"
    }