剑指offer 面试题4—替换字符串中空格

简介: 题目: 实现一个函数,把字符串中的每个空格替换成“%20”。加入输入“we are happy.”,则输出“we%20are%20happy.”。它想说的思想:如果是字符数组来存储的话,每次扫描遇到空格都会导致后面的字符向后移动,然后为了节省这么多移动的时间,就先统计空格的个数,然后数组整体扩容空格数乘以3的空间,把那里当作结束,再从尾到头遍历,找到空格就移,这样整

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

它想说的思想:

如果是字符数组来存储的话,每次扫描遇到空格都会导致后面的字符向后移动,然后为了节省这么多移动的时间,就先统计空格的个数,然后数组整体扩容空格数乘以3的空间,把那里当作结束,再从尾到头遍历,找到空格就移,这样整体就只移过了一次。效率会高很多。

举一反三:

合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

Java实现

public String replaceSpaces(String str) {
        if (str == null) {
            return null;
        }
        int len = str.length(), i = 0;
        StringBuffer sBuffer = new StringBuffer();
        while (i < len) {
            if (str.charAt(i) == ' ') {
                sBuffer.append("%20");
            } else {
                sBuffer.append(str.charAt(i));
            }
            i++;
        }
        return sBuffer.toString();
    }
目录
相关文章
|
1月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
23 0
|
3月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
27 0
|
1月前
|
算法 测试技术 索引
力扣面试经典题之数组/字符串(二)
力扣面试经典题之数组/字符串(二)
13 0
|
3月前
|
算法 Java C++
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
数据结构与算法面试题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。(提示:使用动态规划或者中心扩散)
41 0
|
3月前
面试题 08.07:无重复字符串的排列组合
面试题 08.07:无重复字符串的排列组合
25 0
|
3月前
面试题 01.09:字符串轮转
面试题 01.09:字符串轮转
22 0
|
3月前
面试题 01.06:字符串压缩
面试题 01.06:字符串压缩
19 0
|
3月前
|
前端开发 JavaScript 索引
【面试题】 JavaScript 字符串截取方法有哪些?
【面试题】 JavaScript 字符串截取方法有哪些?
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
|
4月前
【每日一题Day134】面试题 05.02. 二进制数转字符串 | 二进制
【每日一题Day134】面试题 05.02. 二进制数转字符串 | 二进制
22 0