zoukankan      html  css  js  c++  java
  • PHP 逆转字符串与逆转句子

     1  <?php
     2     #颠倒字符串
     3     
     4     #将字符串从头和尾向中间遍历,交换位置
     5     function cstrrev(&$str, $begin, $len) {
     6         $i = $begin;
     7         $j = $begin + $len - 1;
     8         while ($i < $j) {
     9             $temp = $str[$i];
    10             $str[$i] = $str[$j];
    11             $str[$j] = $temp;
    12             $i++;
    13             $j--;
    14         }
    15     }
    16 
    17     #逆转句子,但不逆转单词
    18 
    19     #第一种方法,先将句子整个逆转,再将单词逐个逆转,复杂度为O(2n)
    20     function sentence_rev(&$s) {
    21         cstrrev($s, 0, strlen($s));
    22         $i = 0;
    23         $j = 0;
    24         while ($j < strlen($s)) {
    25             #遇到空格即为一个单词,将该单词逆转
    26             if ($s[$j] == " " || $j == strlen($s) - 1) {
    27                 cstrrev($s, $i, $j - $i);
    28                 $i = $j + 1;
    29             }
    30             $j++;
    31         }
    32     }
    33 
    34     #第二种方法,每次遇到空格即为一个单词,将该单词入栈,然后依次出栈,时间复杂度为O(n),空间复杂度为O(n),其中k为单词数
    35     function sentence_rev2($s) {
    36         $stack = array();
    37         $word = "";
    38         $i = 0;
    39         while ($i < strlen($s)) {
    40             if ($i == strlen($s) - 1) {
    41                 $word .= $s[$i];
    42                 array_push($stack, $word);
    43             }
    44             if ($s[$i] == " ") {
    45                 array_push($stack, $word);
    46                 $word = "";
    47             } else {
    48                 $word .= $s[$i];
    49             }
    50             $i++;
    51         }
    52 
    53         $sr = "";
    54         while (!empty($stack)) {
    55             $sr .= array_pop($stack) . " ";
    56         }
    57 
    58         return substr($sr, 0, strlen($sr) - 1);
    59     }
    60 
    61     $str = "abcdefg";
    62     cstrrev($str, 0, strlen($str));
    63     echo $str . "<br>";
    64     $s = "I am alexis";
    65     sentence_rev($s);
    66     echo $s . "<br>";
    67     $s2 = sentence_rev2("You are not alexis");
    68     echo $s2;
    69 ?>

    gfedcba
    alexis am I
    alexis not are You

  • 相关阅读:
    Centos7搭建OpenNebula云平台
    Python中__new__和__init__的区别与联系
    16个python常用魔法函数
    微信小程序< 1 > ~ Hello 微信小程序
    扬帆起航,再踏征程(一)
    Java 社区平台
    Java 社区平台
    <Android 应用 之路> 一个类似今日头条的APP
    使用标准C读取文件遇到的结构体对齐问题及其解决办法
    编译64位cu文件的设置
  • 原文地址:https://www.cnblogs.com/zemliu/p/2708838.html
Copyright © 2011-2022 走看看