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

文章目录

  • 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
  • 一、字符串切片
  • 二、列表遍历拼接
  • 三、字符串遍历拼接
  • 总结

一、字符串切片

应用字符串切片函数,可方便实现左旋转字符串

获取字符串 s[s:] 切片和 s[:n] 切片,使用 “+” 运算符拼接并返回即可

class Solution{public String reverseLeftWords(String s, int n){return s.substring(n, s.length()) + s.substring(0, n);}
}
  • 时间复杂度 O(n),其中 n 为字符串 s 的长度,字符串切片函数为线性时间复杂度
  • 空间复杂度 O(n),两个字符串切片的总长度为 n

二、列表遍历拼接

算法流程:

  1. 新建一个 StringBuilder,记为 res
  2. 先向 res 添加 “第 n + 1 位至末位的字符”
  3. 再向 res 添加 “首位至第 n 位的字符”
  4. 将 res 转化为字符串并返回

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),线性遍历 s 并添加,使用线性时间
  • 空间复杂度 O(n),新建的辅助 res 使用 O(n) 大小的额外空间

三、字符串遍历拼接

与方法二思路一致,区别是使用字符串代替列表

class Solution{public String reverseLeftWords(String s, int n){String res = "";for(int i = n; i< n + s.length(); i++)res += s.charAt(i % s.length());return res;}
}
  • 时间复杂度 O(n),线性遍历 s 并添加,使用线性时间
  • 空间复杂度 O(n),假设循环过程中内存会被及时回收,内存中至少同时存在长度为 n 和 n - 1 的两个字符串(新建长度为 n 的 res 需要使用前一个长度 n - 1 的 res),因此至少使用 O(n) 的额外空间

总结

【LeetCode】剑指 Offer 58 - II. 左旋转字符串相关推荐

  1. Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)

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

  2. Leetcode 剑指 Offer 58 - II. 左旋转字符串 LCOF - Python

    class Solution:def reverseLeftWords(self, s: str, n: int) -> str:m = len(s)temp = list(s)temp.ext ...

  3. 字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点

    文章目录 一.剑指 Offer 58 - II. 左旋转字符串 二.LeetCode 459.重复的子字符串 一.剑指 Offer 58 - II. 左旋转字符串 思路: 预留出n个字符空间s.res ...

  4. LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)

    文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...

  5. 算法Day8|字符串专题二 剑指 Offer 58 - II. 左旋转字符串,28. 找出字符串中第一个匹配项的下标,459. 重复的子字符串

    剑指 Offer 58 - II. 左旋转字符串 解题思路: 反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串 class Solution {public String reverse ...

  6. 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词

    剑指 Offer 58 - II. 左旋转字符串 把前k个字符移动到结尾 翻转前k个字符,翻转剩余字符 翻转整个字符串 class Solution { public:void reverse(str ...

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

    算法-目录 剑指 Offer 58 - II. 左旋转字符串 方法一:字符串切片[K] 新建两切片字符串,并将两切片拼接为结果字符串,无冗余操作,效率最高. class Solution(object ...

  8. 剑指offer系列——剑指 Offer 58 - II. 左旋转字符串(C语言)

    ⭐️前面的话⭐️ 大家好!博主开辟了一个新的专栏--剑指offer,我要开始刷题了!这个专栏会介绍<剑指offer>书上所有的面试编程题.并且会分享一些我的刷题心得.由于博主水平有限,如有 ...

  9. Leetcode:剑指 Offer 58 - II. 左旋转字符串(C++)

    目录 问题描述: 实现代码: 暴力循环移动法: 原理思路: 翻转法: 原理思路: 问题描述: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能. ...

最新文章

  1. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用
  2. 困扰人工智能50多年的常识问题,是否迎来“破局”?
  3. 新物质?新材料?探索元素周期表,机器学习帮你找!
  4. 软件工程 工具之二—— PowerDesigner v12(二)
  5. Win7和VS2013上使用Intel的TBB
  6. 小女子需要各位博友帮忙—— 一个关于JS 动态表格合并拆分问题
  7. sql日期相关函数的使用方法
  8. 【原理+实战+视频+源码】docker映射端口教程
  9. _Mycat-Web之UI监控
  10. 8除以2表示什么意思_八字中劫财,比肩分别表示什么意思
  11. linux查看气质系统文件命令,Linux dumpe2fs命令:查看文件系统信息
  12. 大数据基础(一)——关系+文章
  13. 北美周末票房榜TOP10 (06.21-23)
  14. C语言数据结构:链表-顺序表:初始化及操作
  15. (18)python字符串的使用
  16. 如何绘画Q版古风人物,超简单超实用,一学就会!
  17. win10右键卡顿原因_Win10 右键卡顿解决办法
  18. LeetCode算法日记:340.至多包含K个不同字符的最长子串
  19. Unity脚本(四)
  20. display:table-cell布局

热门文章

  1. linux 中断服务程序,request_irq() linux注册中断服务
  2. java程序员从笨鸟到菜鸟之_Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)...
  3. 电商面试经验(mybatis)
  4. Splay伸展树入门(单点操作,区间维护)附例题模板
  5. Sublime Text 3 设置
  6. 炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!
  7. leetcode Add Digits
  8. 《十四堂人生创意课》读书笔记,思维导图
  9. BeginInvoke之前检测句柄
  10. Get 和 Post方法的登录