查看原文
其他

一道简简单单的字节跳动算法面试题

程序员吴师兄 吴师兄学算法 2022-06-21

点击上方“图解面试算法”,选择“星标”公众号

重磅干货,第一时间送达

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题05. 替换空格,据官方统计,近半年在字节跳动算法面试中出现过 5 次。

题目链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/

一、题目描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

  • 0 <= s 的长度 <= 10000

二、题目解析

这题还是挺简单的。

遍历字符串中的每个字符,如果不是空格,直接赋值过去数组中;否则,赋值 %20 过去数组中。

最后,从数组中的前 size 个字符创建新字符串,并返回新字符串。

三、动画描述

四、图片描述

五、参考代码

//来源:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-by-leetcode-solutio/
class Solution {
    public String replaceSpace(String s) {
        //获取字符串 s 的长度 length
        int length = s.length();
        //创建字符数组 array,其长度为 length * 3
        char[] array = new char[length * 3];
        //初始化 size 为 0,size 表示替换后的字符串的长度
        int size = 0;
        //从左到右遍历字符串 s
        for (int i = 0; i < length; i++) {
            //获得 s 的当前字符 c
            char c = s.charAt(i);
            //如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
        }
        //遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串
        String newStr = new String(array, 0, size);
        return newStr;
    }
}

六、复杂度分析

时间复杂度

时间复杂度为 O(n),遍历字符串 s 一遍。

空间复杂度

空间复杂度:O(n),额外创建字符数组,长度为 s 的长度的 3 倍。

七、相关标签

  • 字符串

  • 数组

---

由 五分钟学算法 原班人马打造的公众号:图解面试算法,现已正式上线!
接下来我们将会在该公众号上,为大家分享优质的算法解题思路,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存