刷刷刷Day8| 剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串
LeetCode题目要求
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例
输入: s = "abcdefg", k = 2 输出: "cdefgab"
解题思路
// 原串 abcdefg 根据给定的数字 2,转为 cdefgab,即将前两个字符 ab 追加到 cdefg 后面
// 1、可以通过 将 abcdefg 先反转成 gfedcba;
// 2、然后再根据数字 2, 其实是从后面开始把串拆分成两个子串,gfedc ba
// 3、接着再把两个分别反转尾 cdefg 和 ab,拼接两个子串就是所要的结果了
如下图:

上代码
class Solution { public String reverseLeftWords(String s, int n) { // 解题思路 // 原串 abcdefg 根据给定的数字 2,转为 cdefgab,即将前两个字符 ab 追加到 cdefg 后面 // 1、可以通过 将 abcdefg 先反转成 gfedcba; // 2、然后再根据数字 2, 其实是从后面开始把串拆分成两个子串,gfedc ba // 3、接着再把两个分别反转尾 cdefg 和 ab,拼接两个子串就是所要的结果了 // 1. 反转整串 String rs = reverse(s); // 2. 根据 n 的值拆分串 int len = s.length(); String s1 = rs.substring(0, len - n); s1 = reverse(s1); String s2 = rs.substring(len-n, len); s2 = reverse(s2); return s1+s2; } public String reverse(String s) { char[] cs = s.toCharArray(); int left = 0; int right = cs.length - 1; while (left < right) { char t = cs[left]; cs[left] = cs[right]; cs[right] = t; left++; right--; } return new String(cs); } }
重难点
本题写起来并不难,只是比较难想到怎么旋转,通过什么方法做反转。重点是在于字符的反转
附:学习资料链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2017-01-09 log4jdbc 与 logback 集合打印日志过多的解决
2016-01-09 double精度的坑与BigDecimal