面试之路(20)-字符串中空格替换一类问题详解

题目描述

实现一个函数,把字符串中的空格替换为%20,例如“we are happy”,转换为“we%20are%20happy”

思路分析:

  • 遍历的方法,时间复杂度是n×n
  • 采用双指针,从后往前复制数组,遍历统计空格,每增加一个空格,数组长度增加2,设置联两个指针p1,p2,p1指向旧数组的末尾,p2指向新数组的末尾,根据末尾是否是空格分类复制

代码:

public void replaceBlank(char string[],int length){
		if(string == null || length <= 0){
			return;
		}
		//保存字符串的实际长度
		int originLength = 0;
		int numberOfBlank = 0;
		int i  = 0;
		while(string[i] != '\0'){
			++originLength;
			if(string[i] == ' '){
				++numberOfBlank;
			}
			i++;
		}
		int newLength = originLength + numberOfBlank*2;
		//在剑指offer中,此处是newLength > length,我感觉是它错了,欢迎指正
		if(newLength + 1 > length){
			return;
		}
		int indexOld = originLength;
		int indexNew = newLength;
		//剑指offer中这里是>,我是>=
		while(indexOld > 0 || indexNew >= indexOld){
			if(string[indexOld] == ' '){
				string[indexNew--] = '0';
				string[indexNew--] = '2';
				string[indexNew--] = '%';
			}else{
				string[indexNew--] = string[indexOld];
			}
			indexOld--;
		}
	}

测试用例

  • 输入空格在最前,最后,中间,连续
  • 不含空格
  • 字符串是null,内容是空,只保含空格

相似问题:

两个已经排序数组a1,a2,假设a1的空间足够大,a2插入a1

总结:

合并或者插入数组或者字符串,从后往前,采用双指针
本文是看完剑指offer整理写成,有部分不同,有待确认。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值