剑指Offer算法题解:58 - II. 左旋转字符串

左旋转字符串

  • (一)题目描述
  • (二)输入、输出示例
  • (三)代码实现
    • 方法1:
      • 解题思路
      • 代码实现
    • 方法2:
      • 解题思路
      • 代码实现
    • 性能分析

(一)题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

(二)输入、输出示例

示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

(三)代码实现

方法1:

解题思路

最近喜欢使用str_split()函数,就先使用str_split()函数将字符串转成数组。根据数组的key跟n进行判断,若小于n则使用array_push()函数将数组元素放在数组尾部并删除原位置的元素。最后数组元素拼接成字符串。

代码实现

class Solution {
     

    /**
     * @param String $s
     * @param Integer $n
     * @return String
     */
    function reverseLeftWords($s, $n) {
     
        $arr_s = str_split($s);
        foreach ($arr_s as $k_s => $v_s){
     
            if ($k_s < $n){
       
                array_push($arr_s, $v_s);  // 需要移到尾部的元素
                unset($arr_s[$k_s]);
            }
        }
        $s = join("", $arr_s);
        return $s;
    }
}

方法2:

解题思路

使用php内置函数substr()进行字符串的截取。

代码实现

class Solution {
     

    /**
     * @param String $s
     * @param Integer $n
     * @return String
     */
    function reverseLeftWords($s, $n) {
     
    	// substr($s,$n) 将$s字符串从$n截至末尾
    	// substr($s,0,$n) 将$s字符串从0截至$n
        return substr($s,$n) . substr($s,0,$n);
    }
}

性能分析

实现方案 运行时间 内存消耗
方法一(字符串转数组) 8ms 16.3 MB
方法二(内置函数) 4ms 14.7 MB

你可能感兴趣的:(算法,leetcode,php)