题目:翻转字符串“algorithm”
在php中有反转的自带函数,分别为:
字符串反转:strrev()
<?php
$str="Hello world";
$result=strrev($str);
echo $result;
//输出的结果是:dlrow olleH;
?>
数组反转:array_reverse()
注意:array_reverse() 函数将原数组中的元素顺序翻转,创建新的数组并返回。如果第二个参数指定为 true,则元素的键名保持不变,否则键名将丢失。
如果不使用自带函数,反转实现过程:
第一种解法:采用循环数组再拼接字符串:
第二种解法:反转数组,用两个指针,一个指向字符串的第一个字符 a,一个指向它的最后一个字符 m,然后互相交换。交换之后,两个指针向中央一步步地靠拢并相互交换字符,直到两个指针相遇。这是一种比较快速和直观的方法。
注意:由于无法直接修改字符串里的字符,所以必须先把字符串变换为数组,然后再运用这个算法。
代码实现:
class Code{
//第一种直接拼接字符串
function reverse($s){
$arrS = str_split($s);
$k = count($arrS);
//预定义字符空串
$str = '';
foreach ($arrS as $key => $value) {
$k--;
$str .= $arrS[$k];
}
return $str;
}
//第二种交换字符反转数组
function arrayReverse($arr){
//定义前下标
$s = 0;
//定义后下标
$k = count($arr)-1;
foreach ($arr as $key => $value) {
var_dump($s.':'.$k);
//当后下标大于前下标的时候反转数组内容
if($k > $s){
$str = $arr[$s];
$arr[$s] = $arr[$k];
$arr[$k] = $str;
}else{
//为减少循环次数,在没有不需要反转提前跳出循环
break;
}
//反转后移动前后下标
$s++;
$k--;
}
return $arr;
}
}
$obj = new Code();
$res = $obj->reverse('algorithm');
var_dump($res);
$arr = str_split('algorithm');
$arrRe = $obj->arrayReverse($arr);
var_dump($arrRe);
输出结果:
结果
网友评论