剑指offer——替换空格

博客给出一道编程题,要求实现函数将字符串中每个空格替换成“%20”。解题思路采用双指针法,定义两个指针分别指向原字符串数组和新数组,非空格字符直接复制,空格字符替换为“%20”,时间复杂度为O(n),并给出了Java代码。

题目描述:

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

题目思路:

双指针法,定义两个指针分别指向原字符串数组和新的字符串数组。当遇到非空格字符,将对应字符复制到新的字符串数组,当遇到空格字符,在新字符串数组上作修改, 更好为“%20”。时间复杂度为O(n)。

代码(Java):

public class Solution {
    public static String replaceSpace(StringBuffer str) {
		String[] newStr = str.toString().split(""); 
		
		int originalLength = newStr.length;
		int numOfBlanks = 0;
		for(int i = 0; i < originalLength; i++){
			if(newStr[i].equals(" ")){
				++numOfBlanks;
			}
		}
		int newLength = originalLength + 2 * numOfBlanks;
		int indexOfOriginal = originalLength - 1;
		int indexOfNew = originalLength + 2 * numOfBlanks - 1;
		
		String[] temp = new String[newLength];
		for(int i = 0; i < temp.length; i++){
			temp[i] = "1";
		}
		
		int i = 0;
		while(indexOfOriginal <= indexOfNew && indexOfOriginal >= 0){
			if(newStr[indexOfOriginal].equals(" ")){
				temp[indexOfNew--] = "0";
				temp[indexOfNew--] = "2";
				temp[indexOfNew--] = "%";
			}else{
				temp[indexOfNew--] = newStr[indexOfOriginal];
			}
			--indexOfOriginal;
		}
		String tempStr = "";
		for(int j= 1; j < temp.length; j++){
			temp[0] = temp[0].concat(temp[j]);
		}
		System.out.println(temp[0]);
		return temp[0];
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值