在所有可能性的角色之间生成点

时间:2016-04-25 10:54:11

标签: php algorithm

我正在寻找PHP中的算法,用dot输出所有可能性。产生我们可以放在任何字的地方,但现在允许彼此重复两个点。例如“note”输出如下:

note
n.ote
n.o.te
n.o.t.e
no.t.e
not.e
n.ot.e
....

以及输出下方错误:

n..ote (repeat dots right after each other)
.note (put dots at first of word)
note. (put dots at end of word)

2 个答案:

答案 0 :(得分:2)

递归方式:

Put current char of source in the result string
if current char is the last one
     output result
else
     call recursive function with the next char index
     add dot to result and call recursive function with the next char index

迭代方式:

2^(Len-1)个点组合,其中Len是字长。 为k = 0..2^(Len-1) - 1和那些地方的每个k插入点创建一个循环,其中k的二进制表示包含1 s(k = 2 =二进制010 => po.le

答案 1 :(得分:0)

我最终通过https://stackoverflow.com/users/844416/mbo的有用指导找到了解决方案:

function stringInsert($str,$insertstr,$pos){
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}

function generate($var="note",$i=0){
    $length = strlen($var);

    while ($i+1 < $length) {
        $i++;
        $new = stringInsert($var,'.',$i);
        echo $new;
        generate($new,$i+1);

    }
}


generate('shaghayegh');

例如关键字&#34; note&#34;生成7个字符串

关键字&#34; shaghayegh&#34;生成了511个字符串