剑指 offer之替换空格_java
发布日期:2021-05-07 02:40:32 浏览次数:26 分类:精选文章

本文共 1036 字,大约阅读时间需要 3 分钟。

题目:替换空格

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

解题思路:

解题思路:String中的内容是不能改变的。一旦试图改变String中的内容,就会产生一个新的实例。如果试图改变String的内容,改变之后的值只能通过返回值得到。用String做连续多次修改,每一次都会产生一个临时的对象,这样开销太大会影响效率。stringBuffer能容纳修改后的结果,因此如果要连续多次修改字符串内容,用String Buffer是更好的选择。
(1)如果是字符数组,可以定义一个 str的长度+空格个数*2的数组,从后往前移动指针
(2) 用StringBuffer
这道题目在牛客网给出的实现函数是public String replaceSpace(StringBuffer str) {},个人感觉直接在StringBuffer上面进行修改即可,不会产生新的实例。因为给的又不是String,也不是char [] 。但是不知道为什么磁体评论区的大佬还是给出了原书的代码。不过还是具有一定的参考性,这里也会给出评论区某一位大佬的答案做参考。

第一种思路:直接用String Buffer中的replace方法

public class Solution {	public String replaceSpace(StringBuffer str) {		for(int i=0;i

第二种思路:来源于牛客网此题的评论区

/*问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。      从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下      从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。*/public class Solution {    public String replaceSpace(StringBuffer str) {        int spacenum = 0;//spacenum为计算空格数        for(int i=0;i
=0 && indexold

ps:此代码我未做证明与验证,但是思路和原书是相同的

上一篇:剑指 offer之从尾到头打印链表_java
下一篇:剑指 offer之和为S的两个数字_java

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月05日 13时10分07秒