🍎道阻且长,行则将至。🍓
🌻算法,不如说它是一种思考方式🍀
算法专栏: 👉🏻123
一、🌱剑指 Offer 58 - II. 左旋转字符串
- 题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
- 来源:力扣(LeetCode)
- 难度:简单
- 提示:
1 <= k < s.length <= 10000
- 示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
🌴解题
1.直接使用字符串的substring
就是直接截取前后子字符串拼接即可:
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n,s.length())+s.substring(0,n);
}
}
2.通过StringBuilder
使用可变字符串来编辑,先把整个字符串反转,再把两段分别反转就是答案了:
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder ns=new StringBuilder(s);
reverseString(ns,0,s.length()-1);
reverseString(ns,0,s.length()-n-1);
reverseString(ns,s.length()-n,s.length()-1);
return ns.toString();
}
private static void reverseString(StringBuilder ns, int i, int length) {
while (i<length){
char tem= ns.charAt(i);
ns.setCharAt(i,ns.charAt(length));
ns.setCharAt(length,tem);
i++;length--;
}
}
}
3.使用字符数组
创建等长的字符串数组,从旋转的点开始向后填进数组,到最后的位置返回到字符串第一个(取余吧),直到n个字符结束。
class Solution {
public String reverseLeftWords(String s, int n) {
char[]ns=new char[s.length()];
for (int i = 0; i < s.length(); i++) {
ns[i]=s.charAt((i+n)%s.length());
}
return new String(ns);
}
}
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。
物有本末,事有终始。知所先后,则近道矣。——《大学》
☕物有本末,事有终始,知所先后。🍭