【剑指offer】58 - II. 左旋转字符串

剑指 Offer 58 - II. 左旋转字符串

知识点:字符串

题目描述

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

示例
输入: s = "abcdefg", k = 2 输出: "cdefgab" 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"

解法一:调用API

直接调用API String的substring()方法;注意前开后闭;

class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length())+s.substring(0,n); //前开后闭; } }

时间复杂度:O(N);
空间复杂度:O(N);

解法二:列表拼接

直接构造一个数组,对字符串进行遍历,依次填进数组;

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

时间复杂度:O(N);
空间复杂度:O(N);

解法三:字符串拼接

如果规定不能用数组,只能用字符串,可以用字符串拼接;
注意列表拼接的空间复杂度是最高的,因为字符串在Java中是不可变量,所以每次拼接都会申请新内存。

class Solution { public String reverseLeftWords(String s, int n) { String str = ""; for(int i = n; i < n+s.length(); i++){ str += s.charAt(i % s.length()); //利用取余简化程序; } return str; } }

时间复杂度:O(N);
空间复杂度:O(N);

体会

注意字符串在Java语言中是不可变量,所以只要有点变化了就会申请新内存;


__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15046569.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(47)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【剑指offer】58』
点击右上角即可分享
微信分享提示