《剑指offer》—— 43. 左旋转字符串(Java)
推荐
完整《剑指Offer》算法题解析系列请点击 👉 《剑指Offer》全解析 Java 版
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
public class Solution {
public String LeftRotateString(String str,int n) {
}
}
参考思路:
用两个原字符串拼成一个新字符串,然后以纯左移量位置开始截取原字符长度的字符。即可获得左移后的字符串。
纯左移量:比如字符串长度为5,左移 3,左移 8,左移 13 …左移结果其实量都是3,因为每左移的 数组长度(比如5) 位时,与原字符串就一样了。
示例:
字符串 “abc",要左移 7 位。
- 用两个原字符串 “abc” 拼成一个新字符串 “abcabc”。
- 用左移量与字符串长度取模,获取纯左移量,也就是截取开始的位置。
7 % 3 = 1 ,纯左移量为 1 。 - 用纯左移量加上字符长度,获取截取结束的位置。
1 + 3 = 4; - 从新字符串 ”abcabc“ 的 下标1号位截取到下标4号位(下标从0开始)。
截取结果为:“bca” - 返回截取结果 “bca” ,也就是左移结果。
参考实现:
public class Solution {
public String LeftRotateString(String str,int n) {
int len = str.length();
if (len == 0){
return "";
}
//将两个字符串拼成一个,然后从中截取获得左移后的字符串
String st = str + str;
//因为n可能大于数组长度,所以取余,获取左移的位数,即截取的初始位置
n = n % len;
//获取要截取到的位置
len = len + n;
//截取并返回结果。
return st.substring(n,len);
}
}
看完之后,如果还有什么不懂的,可以在评论区留言,会及时回答更新。
这里是猿兄,为你分享程序员的世界。
非常感谢各位大佬们能看到这里,如果觉得文章还不错的话, 求点赞👍 求关注💗 求分享👬求评论📝 这些对猿兄来说真的 非常有用!!!
注: 如果猿兄这篇博客有任何错误和建议,欢迎大家留言,不胜感激!