字符数组的反转
给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
样例 :
输入: str="abcdefg", offset = 3
输出: str = "efgabcd"
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"
public class Demo02 {
public static void main(String[] args) {
Solution so =new Solution();
char[] str =new char[]{'a','b','c','d','e','f','g'};
so.rotateString(str,3);
}
}
class Solution {
/**
* @param str : An array of char
* @param offset : An integer
* @return: nothing
*/
public char[] rotateString(char[] str, int offset) {
// write your code here
if (str.length==0){
return;
}
if (offset>str.length){ //判断偏移量
offset =offset%str.length;
}
int l =str.length; //数组的长度
int foot =l-offset; //在元字符数组需要反转的位置,需要反转的为后面offset,所以先从foot位开始输出
int num =0;
char[] array =new char[l]; //定义一个新的数组用于接收字符
while (num<offset) { //输出需要反转位置的后半部分
for (int i =0 ; i <offset; i++) {
array[i] = str[foot];
foot++;
num++;
}
}
for (int i =0; i <l-offset ; i++) {//按顺序输出反转位置前面剩余的字符
array[num]=str[i];
num++;
}
for (int x=0;x<array.length;x++){ //输出反转后的字符组
System.out.print(array[x]);
}
return array;
}
}
1、先明确输出的后面几位在数组中的位置。
2、将数组拆分成两份,因为要反转位置,所以先将后面的字符顺序添加到新字符数组中。
3、再将剩余的数组按顺序添加到新的字符数组中。此时要格外注意数组前几位已经被后面的几个字符占用,要明确剩余字符
输入到新字符数组中的位置。
4、将添加完的新数组输出。’

浙公网安备 33010602011771号