我正在尝试编写一个函数,让我们说“嘿那里”,然后创建一个包含该字符串的所有前缀的数组。所以它会返回“h”,“他”,“嘿”,“嘿”,“嘿嘿”等等。
然后我想要相同的函数来创建所有后缀的第二个数组(向后向下计数字符串)。所以对于相同的字符串,它将返回“e”,“er”,“ere”,“ereh”,“ereht”,“ereht”等
我有点想要弄清楚这个,但我设法得到以下内容,它获得了一个字符串的所有可能组合,我只需要按顺序完成它。
$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.
}
非常感谢任何帮助。
答案 0 :(得分:2)
这是你想要做的吗?
<?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
)
*/
?>
答案 1 :(得分:0)
是一个简单的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));
}
答案 2 :(得分:0)
这应该有效。我写了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;
}