PHP字符串颠倒顺序的函数

来源:互联网 发布:新疆大学知乎 编辑:程序博客网 时间:2024/05/21 17:37

      面试中经常会有这道题。只要思路明晰,可以轻松写出来。

      首先,php自带了一个字符串颠倒顺序的函数。

代码:

   1: $str    = 'To Change The template';
   2: echo strrev($str);
   3: // 结果:etalpmet ehT egnahC oT
其次,使用递归函数实现。当然效率很低!
   1: function reverse_r($str) {
   2:     if (strlen($str) > 0){
   3:         reverse_r(substr($str, 1));
   4:     }
   5:     echo substr($str, 0, 1);
   6:     return;
   7: }
   8: echo reverse_r($str);
第三,使用循环实现,效率有很大的提高。
   1: /**
   2:  * 利用循环实现字符串逆序排列
   3:  */
   4:  function reverse_i($str){
   5:      for ($i = 1; $i < = strlen($str); $i++){
   6:          echo substr($str, -$i, 1);
   7:      }
   8:      return;
   9:  }
  10: echo reverse_i($str);
最后,使用二分法实现,效率有更大的提高。
   1: /**
   2:  * 使用二分法来实现字符串颠倒顺序。
   3:  */
   4:  function reverse_a($str){
   5:     $forNum    = ceil(strlen($str)/2);
   6:     $strLen    = strlen($str);
   7:     for ( $i = 1; $i < = $forNum; $i++) {
   8:         if($i <= $strLen-$i){
   9:             $tmp        = $str[$i-1];
  10:             $str[$i-1]    = $str[$strLen-$i];
  11:             $str[$strLen-$i]= $tmp;
  12:         }
  13:     }
  14:     return $str;
  15:  }
  16: // 注:其实按照二分法来实现,理论上效率会提升一半,但是这个涉及
  17: //到数组的指针操作,实际效率会怎样?难说。
  18: echo "二分实现:/t",reverse_a($str);

最后一种方法涉及到三个知识点:

1. ceil()函数:进一法取整。如:5/4=1.25,ceil(5/4)=2,不管小数位是否大于0.5,均进一取整。
2. 字符串当成数组访问,如$str[0],$str[1]...可以访问字符串$str的第一个字符、第二个字符...
3. 二分法。方法3需要循环的次数是字符串的长度,而方法4则是字符串长度的一半,所以效率会提高一倍(理论上)。

原创粉丝点击