刷刷刷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);
}
}
重难点

本题写起来并不难,只是比较难想到怎么旋转,通过什么方法做反转。重点是在于字符的反转

附:学习资料链接

posted @   blacksonny  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2017-01-09 log4jdbc 与 logback 集合打印日志过多的解决
2016-01-09 double精度的坑与BigDecimal
点击右上角即可分享
微信分享提示