美文网首页
替换空格

替换空格

作者: 刘小树树树树 | 来源:发表于2019-11-13 16:08 被阅读0次

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

解析
需要将一个字节的“空格”替换成三个字节的“%20”
首先,String类提供了replaceAll(regex, replacement)的方法,可以直接调用。

另外,可以考虑new一个新的StringBuffer,遍历传过来的字符串,依次向新的StringBuffer中append(),遇到“空格”,则append("%20"),遍历完成return即可。

而看了讨论区大佬们的思路,才恍然大悟。这类算法题最重要的就是节省时间和空间。
思路是在不新分配空间的前提下,将字符串从后向前遍历并替换,减少字符的移动。
首先,先遍历一遍字符串,记录字符串长度和字符串空格的个数,根据这两个可以计算出替换后的字符串的长度,并给字符串设置替换后的长度;然后,倒序遍历字符串,使用StringBuffer.setCharAt(index, ch)方法从末尾set,遇到“空格”,就连续set'0','2','%'。(主要在遍历和set时,老字符串长度和新字符串长度都要-1,不然会数组越界)

Java

/**
 * 用String类的replaceAll()方法
 * 运行时间:23ms
 * 占用内存:9256k
 */
public String repalceSpace1(StringBuffer str) {
    return str.toString().replaceAll(" ", "%20");
}

/**
 * 创建一个新对象存储
 * 运行时间:26ms
 * 占用内存:9572k
 */
public String repalceSpace2(StringBuffer str) {
    StringBuffer result = new StringBuffer();
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (c == ' ') {
            result.append("%20");
        } else {
            result.append(c);
        }
    }
    return result.toString();
}

/**
 * 先遍历一遍记录替换后的长度,从后往前替换,减少移动
 * 运行时间:20ms
 * 占用内存:9412k
 */
public String repalceSpace3(StringBuffer str) {
    if (str == null || str.length() <= 0) {
        return "";
    }
    //老数组长度
    int oldLength = 0;
    //空格数
    int spaceNum = 0;
    for (int i = 0; i < str.length(); i++) {
        oldLength++;
        if (str.charAt(i) == ' ') {
            spaceNum++;
        }
    }
    //新数组长度
    int newLength = oldLength + spaceNum * 2;
    //设置数组长度为新
    str.setLength(newLength);
    int oldIndex = oldLength - 1;
    int newIndex = newLength - 1;
    while (oldIndex >= 0 && newLength > oldLength) {
        if (str.charAt(oldIndex) == ' ') {
            str.setCharAt(newIndex--, '0');
            str.setCharAt(newIndex--, '2');
            str.setCharAt(newIndex--, '%');
        } else {
            str.setCharAt(newIndex--, str.charAt(oldIndex));
        }
        oldIndex--;
    }
    return str.toString();
}

Python

Python则直接提供了replace()方法

class Solution:
    # 运行时间:25ms
    # 占用内存:5640k
    def replaceSpace(self, s):
        return s.replace(' ', '%20')

if __name__ == '__main__':
    a = Solution()
    print(a.replaceSpace('We are family'))

相关文章

  • 替换空格

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

  • 空格替换

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

  • 替换空格

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

  • 空格替换

    空格替换设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你...

  • 替换空格

    《剑指offer》面试题5:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we...

  • 替换空格

    ?环境:牛客的编译环境?语言:JavaScript☕️难点:string的replace方法在不使用正则匹配的情况...

  • 替换空格

    https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3...

  • 替换空格

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

  • 空格替换

    一、题目 请编写一个方法,输入一个字符串,经过一定的处理将字符串中的“空格”替换为“%20”并返回; 二、示例 输...

  • 替换空格

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

网友评论

      本文标题:替换空格

      本文链接:https://www.haomeiwen.com/subject/mtxkictx.html