所有空间都在变化的php字符串

时间:2014-08-24 17:37:36

标签: php arrays string permutation

我有这样的字符串:hello world new foo

我需要这样的数组:

[
  `helloworld new foo`,
  `hello worldnew foo`,
  `hello world newfoo`,
  `helloworldnew foo`,
  `hello worldnewfoo`,
]

顺序并不重要,但我需要在当前字符串中删除所有空格。

2 个答案:

答案 0 :(得分:1)

您可以使用递归来枚举所有可能性:

<?php

function combine($words, $acc=array(), $res=array()){
    if(count($words)===0){
        $res[] = join("", $acc);
        return $res;
    }
    if(count($words)===1){
        $res[] = join("", $acc).$words[0];
        return $res;
    }
    $w1 = array_shift($words);
    $res = combine($words,  array_merge($acc, array("$w1")),  $res);
    $res = combine($words,  array_merge($acc, array("$w1 ")), $res);
    return $res;
}

var_dump( combine( explode(' ', 'hello world new foo') ) );

另一个可能的解决方案是在你的单词之间表示N个空格,作为可以打开或关闭的二进制数中的位,然后从0到2 ^ N-1计数,但我认为在PHP中将是更复杂。

注意:上面的递归解决方案,返回所有可能的组合...所以如果你有一个包含4个单词的输入数组,其中一个结果将所有4个单词加入

答案 1 :(得分:1)

从我的理解,你需要所有可能的组合与给定的单词。所以:

  1. posible combinations = amountofwords * amountofspaces。
  2. 开始迭代以获得无形的评论。 - &GT; for(i=0;i<=(words*spaces);i++)
  3. String中找到数组和空格中的单词,因此$WordArray = $string.split(" ")$spaces = substr_count(" ")
  4. 开始迭代可能的单词组合。 for(j=0;j<=words;j++)
  5. 开始迭代空间量。 for(k=0;k<=spaces;++)
  6. 结合所有。
  7. 但请记住,PERMUTATIONS and COMBINATIONS for computer science是您首先需要学习的内容,因此上面的答案有很多意义。

    这是一个帮助您入门的链接。 http://cpsc.ualr.edu/srini/DM/chapters/review3.4.html