gpt4 book ai didi

php - 没有 strrev 的反向字符串

转载 作者:IT王子 更新时间:2023-10-29 00:57:27 25 4
gpt4 key购买 nike

前段时间,在一次求职面试中,我得到了使用 strrev 在 PHP without 中反转字符串的任务。

我的第一个解决方案是这样的:

$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);

但它只会给我未初始化的字符串偏移错误。

这是我(再次)卡住的地方。我尝试使用谷歌搜索,但我找到的所有解决方案都是直接 echo 字符或使用临时变量。

我还找到了问题 PHP String reversal without using extra memory但没有适合我需要的答案。

最佳答案

这很有趣。这是我刚刚想到的:

$s = 'abcdefghijklm';
for($i=strlen($s)-1, $j=0; $j<$i; $i--, $j++) {
list($s[$j], $s[$i]) = array($s[$i], $s[$j]);
}
echo $s;

list() 可用于在一次操作中分配变量列表。所以我所做的只是交换字符(从第一个和最后一个开始,然后是第二个和第二个等等,直到它到达字符串的中间)

输出是 mlkjihgfedcba。不使用 $s 和计数器以外的任何其他变量,所以我希望这符合您的标准。

关于php - 没有 strrev 的反向字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29817361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com