不带 strrev 的反向字符串
前段时间,在一次求职面试中,我得到了一个任务,即在不使用的情况下反转PHP中的字符串。strrev
我的第一个解决方案是这样的:
$s = 'abcdefg';
$temp = '';
for ($i = 0, $length = mb_strlen($s); $i < $length; $i++) {
$temp .= $s{$length - $i - 1};
}
var_dump($temp);
// outputs string(7) "gfedcba"
然后他们问我是否可以在不增加内存使用量的情况下做到这一点(不使用变量或任何变量来复制反转的字符串),我失败了。这一直困扰着我,从那时起,我多次试图解决这个问题,但我总是失败。$temp
我的最新尝试如下所示:
$s = 'abcdefg';
for ($i = 0, $length = mb_strlen($s); $i < $length; $i++) {
$s = $s{$i * 2} . $s;
}
var_dump($s);
// outputs string(14) "gfedcbaabcdefg"
在循环后砍掉“abcdefg”不是一个解决方案,因为那样我仍然会使用两倍的内存量。我需要删除循环每次迭代中的最后一个字符。
我试图像这样使用:mb_substr
$s = 'abcdefg';
for ($i = 0, $length = mb_strlen($s); $i < $length; $i++) {
$s = $s{$i * 2} . mb_substr($s, $length - $i - 1, 1);
}
var_dump($s);
但它只会给我错误。Uninitialized string offset
这就是我(再次)陷入困境的地方。我尝试谷歌搜索,但所有的解决方案我要么直接找到字符,要么使用临时变量。echo
我还发现问题PHP字符串反转而不使用额外的内存,但没有适合我需求的答案。