字符串的调整与替换

【题目】给定一个字符类型的数组chas[],chas右半区全是空字符,左半区不含有空字符。现在想将左半区中所有的空格字符替换成“%20”,假设chas右半区足够大,可以满足替换所需要的空间,请完成替换函数。

【举例】如果把chas的左半区看作字符串,为“a b c”,假设chas的右半区足够大。替换后,chas的左半区为“a%20b%20%20c”。

【要求】替换函数的时间复杂度为O(N),额外空间复杂度为O(1)

public static void replace(char[] chas) {
		if (chas.length == 0 || chas == null) {
			return;
		}
		int len;
		int num = 0;
		for (len = 0; len < chas.length && chas[len] != 0; len++) {
			if (chas[len] == ' ') {
				num++;
			}
		}
		int j = len + 2 * num - 1;
		for (int i = len - 1; i > -1; i--) {
			if (chas[i] != ' ') {
				chas[j--] = chas[i];
			} else {
				chas[j--] = '0';
				chas[j--] = '2';
				chas[j--] = '%';
			}
		}
	}

【题目】给定一个字符类型的数组chas[],其中只含有数字字符和“-”字符。现在想把所有的“-”字符挪到chas的左边,数字字符挪到chas的右边。请完成调整函数

【举例】如果chas看作字符串,为“–12345”。调整后为chas为“–12345”.

【要求】替换函数的时间复杂度为O(N),额外空间复杂度为O(1),不得改变数字字符从左到右出现的顺序。

public static void modify(char[] chas) {
		if (chas.length == 0 || chas == null) {
			return;
		}
		int j = chas.length - 1;
		for (int i = chas.length - 1; i > -1; i--) {
			if (chas[i] != '-') {
				chas[j--] = chas[i];
			}
		}
		for (; j > -1;) {
			chas[j--] = '-';
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值