【剑指offer】 面试题4: 替换空格

本文介绍了一种将字符串中的空格替换为“%20”的算法实现,通过使用额外的空间来达到O(n)的时间复杂度,适用于URL编码等场景。

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

题目描述:

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


九度:http://ac.jobdu.com/problem.php?pid=1510


时间复杂度:0( n )


package com.offer.chapter_2;

import java.util.Scanner;

/**
 * @author hadoop
 * 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 */
public class Interviews_4 {
	
	public static void replaceAllBlack(char[] strs, int blackNum, int i, int j) {
		for(int k =blackNum; k > 0 ;) {
			if(strs[j] == ' ') {
				strs[i--] = '0';
				strs[i--] = '2';
				strs[i--] = '%';
				j --;
				k --;
			} else {
				strs[i--] = strs[j--];
			}
		}	
	}
	
	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		String string;
		
		while(scanner.hasNextLine()) {
			string = scanner.nextLine();
			int blackNum = 0;
			// 计算空格数量
			for(int i=0; i<string.length(); i++) {
				if(string.charAt(i) == ' ') {
					blackNum ++;
				}
			}
			// 开辟字符串数组长度
			char[] strs = new char[string.length() + blackNum * 2];
			
			System.arraycopy(string.toCharArray(), 0, strs, 0, string.length());
			
			// 模拟假设原数组转换,且0(n)时间复杂度	
			int i = strs.length - 1;
			int j = string.length() - 1;
			
			replaceAllBlack(strs, blackNum, i, j);	
			
			for(int k =0; k<strs.length; k++) {
				System.out.print(strs[k]);
			}
			
			System.out.println();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值