剑指OFFER 面试题5(字符串):替换空格 (JAVA)

本文介绍了一种高效的字符串空格替换算法,通过从后往前遍历字符串,将每个空格替换为%20,实现时间复杂度为O(n)。文章详细解释了算法流程,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从后往前移动,每个字符仅移动一次,时间复杂度O(n)。

package codingquestions;

public class ReplaceBlank {
	public static String replacespaces(String str) {
		if (str==null || str.length() <=0)
			return null;
		int spacenum=0;
		for (int i=0;i<str.length();i++) {
			if (str.charAt(i)==' ') {
				spacenum++;
			}			
		}
		
		int oldstrlen=str.length();
		int newstrlen=str.length()+2*spacenum;
		int oldindex=oldstrlen-1;
		int newindex=newstrlen-1;
		
		StringBuffer str1 = new StringBuffer(str);// convert string to StringBuffer
		str1.setLength(newstrlen);
		while (oldindex>=0 && newindex>oldindex) {
			if (str1.charAt(oldindex)==' ') {
				str1.setCharAt(newindex--, '0');
				str1.setCharAt(newindex--, '2');
				str1.setCharAt(newindex--, '%');
			}else {
				str1.setCharAt(newindex--, str1.charAt(oldindex));
				
			}
			oldindex--;
		}		
		return str1.toString();		
	}
	public static void main(String[] args) {
		String str = "We are happy forever.";
	    String result = replacespaces(str);
	    System.out.println(result);
	    }
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值