Php 获取字符串的所有可能组合(前缀/后缀)
我正在尝试编写一个函数,它将让我们说“hey there”,然后创建一个包含该字符串所有前缀的数组。所以它会返回“h”,“he”,“hey”,“hey”,“t”等等 然后,我希望使用相同的函数创建第二个包含所有后缀的数组(倒数计算字符串)。因此,对于同一个字符串,它将返回“e”、“er”、“ere”、“ereh”、“ereht”、“ereht”等 我正在努力弄清楚这一点,但我已经设法得到了下面的结果,它得到了一个字符串的所有可能的组合,我只需要让它按顺序来做Php 获取字符串的所有可能组合(前缀/后缀),php,Php,我正在尝试编写一个函数,它将让我们说“hey there”,然后创建一个包含该字符串所有前缀的数组。所以它会返回“h”,“he”,“hey”,“hey”,“t”等等 然后,我希望使用相同的函数创建第二个包含所有后缀的数组(倒数计算字符串)。因此,对于同一个字符串,它将返回“e”、“er”、“ere”、“ereh”、“ereht”、“ereht”等 我正在努力弄清楚这一点,但我已经设法得到了下面的结果,它得到了一个字符串的所有可能的组合,我只需要让它按顺序来做 $str = "hey the
$str = "hey there";
function permute($str,$i,$n) {
if ($i == $n)
print "$str\n";
else {
for ($j = $i; $j < $n; $j++) {
swap($str,$i,$j);
permute($str, $i+1, $n);
swap($str,$i,$j); // backtrack.
}
}
}
// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}
permute($str,0,strlen($str)); // call the function.
}
$str=“你好”;
函数排列($str,$i,$n){
如果($i==$n)
打印“$str\n”;
否则{
对于($j=$i;$j<$n;$j++){
掉期($str,$i,$j);
排列($str,$i+1,$n);
交换($str,$i,$j);//回溯。
}
}
}
//函数在$str的$i和$j位置交换字符。
函数交换(&$str,$i,$j){
$temp=$str[$i];
$str[$i]=$str[$j];
$str[$j]=$temp;
}
排列($str,0,strlen($str));//调用函数。
}
非常感谢您的帮助。一个简单的for循环和几个substr也能做到这一点吗
$prefixes = array();
$suffixes = array();
$str = "hey there";
$l = strlen($str);
for($i=1; $i<$l; $i++) {
$prefixes[] = substr($str, 0, $i);
$suffixes[] = strrev(substr($str, $l-$i, $i));
}
$prefixes=array();
$后缀=数组();
$str=“你好”;
$l=strlen($str);
对于($i=1;$i来说,这就是你想要做的吗
<?php
function getPrefixSuffix($string, &$prefixes = array(), &$suffixes = array()) {
$stringLength = strlen($string);
for ($i = 1; $i < $stringLength; $i++) {
$prefixes[] = substr($string, 0, $i);
}
for ($i = $stringLength - 1; $i >= 1; $i--) {
$suffixes[] = strrev(substr($string, $i));
}
}
getPrefixSuffix("hey there", $prefixes, $suffixes);
print_r($prefixes);
/*
Array
(
[0] => h
[1] => he
[2] => hey
[3] => hey
[4] => hey t
[5] => hey th
[6] => hey the
[7] => hey ther
)
*/
print_r($suffixes);
/*
Array
(
[0] => e
[1] => er
[2] => ere
[3] => ereh
[4] => ereht
[5] => ereht
[6] => ereht y
[7] => ereht ye
)
*/
?>
这应该可以。我编写了3个函数。第一个函数通过在每次追加时打印来获取所有前缀。第三个是您编写的交换方法。第二个函数只是向后交换字符串,然后调用getPrefix。请注意,原始字符串保持不变
$str = "hey there"
function getPrefix($str)
{
$printString = "";
for ($i = 0; $i < strlen($str); $i++)
{
$printString .= $str[$i];
print ($printString);
}
}
function getBackwards($str)
{
if (strlen($str) % 2 == 0)
{
for ($i = 0; $i < strlen($str)/2; $i++)
swap ($str, $i, strlen($str)-1-$i);
}
else
{
for ($i = 0; $i < (strlen($str)-1)/2; $i++)
swap ($str, $i, strlen($str)-1-$i);
}
getPrefix($str);
}
function swap(&$str,$i,$j)
{
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}
$str=“你好”
函数getPrefix($str)
{
$printString=“”;
对于($i=0;$i
substr、strrev和循环的组合就可以了。不是重复的,我不想生成文章中所述的所有组合。请在评论之前阅读,我会检查这些函数,谢谢。几乎不值得回答:function permute($string){$length=strlen($string);$result=array();对于($i=1;$i做了这个工作标记)更有趣的是使用尝试来做它,至少它学习了一些关于数据结构的有用的东西,以及将strev
添加到$subfixes
,因为OP希望它作为ereht
而不是那里
。