读书笔记-剑指offer面试题4

剑指offer面试题4:一个字符串中的空格 替换为%20

 

一般解法:如果一个一个的遍历,碰到空格就把它换为%20,那么后面的所有元素都要移动两个位的距离,时间复杂度O(N2)

 

O(n) 解法:遍历一遍字符串,得出空格的个数,这样 就得到替换后的新的字符串长度NewLength。那么首先我们准备两个指针,第一个p1指向字符串的末尾,另一个p2指向被替换后的字符串的末尾,这样p1,p2同时向前移动,如果p1指向的值不为空格,则直接复制到p2所指向的位置,如果碰见空格,则把空格替换为%20,然后复制的p2所指的位置,然后p2向前多一动两步。

 

//字符串空格替换为%20
void ReplaceString(char *str,int length){

    //判断字符串是否为空,或长度小于0
    if(NULL==str||length<=0)
	return;
    else{
    
	int originalLength=0;//实际长度
	int NewLength=0;//替换后的长度
	int i=0,j=0;

	while(str[i]!='\0'){

	    ++originalLength;
	    if(str[i]==' ')
		++j;
	    ++i;
	}
	NewLength=originalLength+j*2;

	while(originalLength>0||NewLength>originalLength){
	
	    if(str[originalLength]==' '){
	    
		str[NewLength--]='0';
		str[NewLength--]='2';
		str[NewLength--]='%';
	    }
	    else{
	    
		str[NewLength--]=str[originalLength];
	    }
	    --originalLength;
	}
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值