C/C++教程

Leetcode剑指 Offer 58 - II. 左旋转字符串(简单模拟)

本文主要是介绍Leetcode剑指 Offer 58 - II. 左旋转字符串(简单模拟),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/

解题思路

方法一:append()方法

StringBuilder里面append方法可以截取字符串s中一部分

代码

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder sb = new StringBuilder();
        sb.append(s,n,s.length());
        sb.append(s,0,n);
        return sb.toString();
    }
}

复杂度分析

  • 时间复杂度:O(1)
  • 空间复杂度:O(n)

方法二:常规做法

我们假设把字符串复制一遍,然后添加到该字符串后面,这样我们就可以从第n个位置开始,截取s的长度个数字符,就是答案,我们实际上不需要复制字符串,而是直接进行取模操作就行,有点像循环队列。

代码

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
         for(int i = n; i < n + s.length(); i++)
            res.append(s.charAt(i % s.length()));
        return res.toString();
    }
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
这篇关于Leetcode剑指 Offer 58 - II. 左旋转字符串(简单模拟)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!