剑指offer学习(Java)——面试题5:替换字符串中的空格

本文介绍了一个用于替换字符串中空格的算法,并提供了一种将两个已排序数组进行归并的方法。通过具体实例展示了如何使用Java实现这些功能。

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

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。

这题思路也很清晰,字符串,字符数组,或者其他的数组,涉及到大量移动的时候就从屁股开始

牛客练习连接:替换空格

代码如下:

public class Solution {
public String replaceSpace( StringBuffer str) {
if(str == null || str. length() == 0){
return str. toString();
}
int originalLength = str. length();
int numberOfBank = 0;
for( int i = 0;i <originalLength;i ++){
if(str. charAt(i) == ' '){
numberOfBank ++;
}
}

int newLength = originalLength +numberOfBank * 2;
str. setLength(newLength); //这里需要重新设置StringBuffer的长度,不然会报越界异常
int p1 = originalLength - 1;
int p2 = newLength - 1;
while(p1 >= 0 && p2 >p1){
if(str. charAt(p1) != ' '){
str. setCharAt(p2 --, str. charAt(p1));
} else{
str. setCharAt(p2 --, '0');
str. setCharAt(p2 --, '2');
str. setCharAt(p2 --, '%');
}
p1 --;
}
return str. toString();
}
}


    此题拓展:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中所有数字插入A1中,并且所有的数字是排序的。

    就是一次归并排序,思路一样的,从屁股开始,从A1和A2的屁股取出两个数比较,大的放到A1的后面,然后重复这个动作,如果A2先放完,结束;如果A1先放完,则把A2剩下的逐个放到A1中。

leetcode练习地址:88. Merge Sorted Array

代码如下:

public class Solution{
public void merge( int[] A1, int[] A2){
int i = A1.length - 1;
int j = A2.length - 1;
int length = i +j + 1;
while(i >= 0 && j >= 0){
if( A1[i] < A2[j]){
A1[length --] = A2[j];
j --;
} else{
A1[length --] = A1[i];
i --;
}
}
while(j >= 0){
A1[length --] = A2[j];
j --;
}
}
}


两个while也可以简写为:

while(i >= 0 && j >= 0) A1[length --] =( A1[i] > A2[j]) ? A1[i --] : A2[j --];
while(j >= 0) A1[length --] = A2[j --];

直接贴的VSCode里面自己写的代码,彩色比较炫奋斗


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值