题目
s = "abcd123" k = 3
Return "123abcd"
将字符串向右循环移动 k 位
思路
假设要把数组序列abcd123右移3位变成123abcd,比较移位前后数组序列的形式,可以看出有两段序列的顺序是不变的,abcd和123,可以把这两段看作两个整体,右移3位,就是把数组的两部分交换一下。
设计的算法步骤如下:
- 逆序数组子序列abcd变为dcba
- 逆序数组子序列123变为321
- 全部逆序,数组序列由dcba321变为123abcd
知识点
string.toCharArray
string.toCharArray()
将字符串对象中的字符转换为一个字符数组, 例如:
String str = "abcd";
char[] array = str.toCharArray();
System.out.println("array[1]=" + array[1]);
输出结果:
array[1] = b
String.valueOf(char[] data)
String.valueOf(char[] data)
, 将 char 数组 data 转换成字符串
String 类别中已经提供了将基本数据型态转换成 String 的 static 方法, 也就是 String.valueOf() 这个参数多载的方法
- String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
- String.valueOf(char c) : 将 char 变量 c 转换成字符串
- String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
- String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素
- 转换成字符串 String.valueOf(double d) : 将 double 变量 d 转换成字符串
字符串翻转的两种方法
方法1:
//提供参数,字符串翻转,从b到e逆序
public static char[] reverse(char[] array, int b, int e) {
char temp;
for (; b < e; b++, e--) {
temp = array[b];
array[b] = array[e];
array[e] = temp;
}
return array;
}
方法2:
//只给出String
public static String reverse(String str) {
char[] array = str.toCharArray();
for(int i = 0; i < str.length() / 2; i++) {//记得要除以2
char temp = array[i];
array[i] = array[str.length() - 1 - i];
array[str.length() - 1 - i] = temp;
}
return String.valueOf(array);//String.valueOf(char[] data) 将char数组data转换成字符串
}
代码
public class test {
//字符串翻转,从b到e逆序
public static char[] reverse(char[] array, int b, int e) {
char temp;
for (; b < e; b++, e--) {
temp = array[b];
array[b] = array[e];
array[e] = temp;
}
return array;
}
//对整个字符串进行翻转
public static String reverseAll(String str, int k) {//右移k位,就是分成[0, n-k-1] 和[n-k, k-1]两部分
int n = str.length();
char[] array = str.toCharArray();
array = reverse(array, 0, n-k-1);//步骤1, 翻转[0, n-k-1]
array = reverse(array, n-k, n-1);//步骤2, 翻转[n-k, k-1]
array = reverse(array, 0, n-1);//步骤3, 整个翻转
return String.valueOf(array);
}
public static void main(String[] args) {
String finalResult = reverseAll("abcd123", 3);
System.out.println(finalResult);
}
}