问题描述
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
重点
如何对字符串数组进行原地旋转。
输入: str="abcdefg", offset = 3
输出: str = "efgabcd"
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"
主要考点
- 如何寻找旋转中心点?
- 如何对字符数组进行重新编排?
- 在偏移量大于字符数组最大长度时如何规避错误?
算法逻辑
- 当字符数组str为空或长度为0时,不对str做任何操作
- 使用给定偏移量取余字符数组最大长度获取最终偏移量
- 使用字符数组长度减去最终偏移量获得旋转中心点坐标
- 将数组转化为字符串按照中心点进行裁剪并拼接
- 循环对str数组进行赋值
实现代码
public void rotateString(char[] str, int offset) {
if(str == null || str.length == 0)
return;
offset = offset % str.length;
String s = String.valueOf(str);
int sl = str.length - offset;
char[] z = (s.substring(sl,s.length())+s.substring(0,sl)).toCharArray();
for (int i = 0;i<z.length ;i++ ){
str[i] = z[i];
}
}