BCZM2.17 - 字符串循环移位 - toCharArray()/字符串翻转

题目

s = "abcd123" k = 3
Return "123abcd"

将字符串向右循环移动 k 位

思路

假设要把数组序列abcd123右移3位变成123abcd,比较移位前后数组序列的形式,可以看出有两段序列的顺序是不变的,abcd和123,可以把这两段看作两个整体,右移3位,就是把数组的两部分交换一下。

设计的算法步骤如下:

  1. 逆序数组子序列abcd变为dcba
  2. 逆序数组子序列123变为321
  3. 全部逆序,数组序列由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);
	}
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值