字符串,把这个碍眼的空格给我换掉!

简介: 字符串,把这个碍眼的空格给我换掉!

大家好呀,我是事事儿的蛋蛋。


今天来搞替换空格,没啥说的,直接冲


640.png


   剑指 Offer 05:替换空格



题意


把字符串 s 中的每个空格替换成 "%20"



示例


输入:s = "We are happy."

输出:"We%20are%20happy."


提示


0 <= length(s) <= 10000


题目解析


水题,难度简单。


字符串这边的题大多数都是可以用编程语言自带的库函数解决的,但是我们在 LeetCode 上刷题初期显然不能这样。


我们现在刷题的目的是为了更好的理解数据结构与算法,更好的理解一些封装起来的库函数是怎么实现的,而不是简简单单的为了刷题而刷题。


这道题的解法也不复杂,就是遍历整个字符串 s:


  • 碰到非空格就继续走。
  • 碰到空格就替换。

图解


以 s = "We are happy." 为例。为了方便表示,我以下面的形式表示整个字符串。

640.png

在这维护一个结果列表 res,遍历字符串,刚开始碰到的是 "we",直接加入 res。


640.png


if c != ' ':
    res.append(c)


接下俩碰到空格,替换为 "%20",加入列表。640.png



if c == ' ':
    res.append('%20')

接下来依次按照上面的情况进行,直至列表遍历完。


640.png


本题的解法从左到右遍历整个字符串,所以时间复杂度为 O(n)


时间复杂度还是按照你用的编程语言来算,如果字符串可修改的编程语言,比如 Python、Java,需要维护一个新的列表,这个的空间复杂度为 O(n),像可原地修改字符串的编程语言,比如 C++,这样的空间复杂度为 O(1)


代码实现


Python 代码实现

class Solution:
    def replaceSpace(self, s: str) -> str:
        # python 字符串不可修改,所以维护一个列表
        res = []
        for c in s:
            if c == ' ':
                res.append('%20')
            else:
                res.append(c)
        return ''.join(res)


Java 代码实现


class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}


图解替换空格到这就结束辣,是不是不用库函数也很简单?


醒醒,这才是道简单题,也就比 ”Hello World“ 难一丢丢,难题还在后面,不要飘。


不过,可以给我多点点赞在看,让我飘起来呀。


哈哈哈,我是帅蛋,我们下次见。



640.gif



相关文章
|
数据采集 Java 机器人
根据正则表达式截取字串符,这个办法打败99%程序员
作为一名程序员,常常会在以下情况下使用函数功能根据正则表达式截取字符串:
如何去掉字符串开头,结尾或者中间的空格及其他不想要的字符
去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
|
6月前
|
C语言 C++
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
36 0
Java字符串去掉空格的几种方法
Java字符串去掉空格的几种方法
|
数据采集 移动开发
一日一技:在字符串中批量替换单个字符
一日一技:在字符串中批量替换单个字符
144 0
|
存储 算法
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
|
算法 安全
每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
306 0
每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 输入格式 共一行,包含一个字符串。 输出格式 输出去掉多余空格后的字符串,占一行。 数据范围 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
324 0
1576. 替换所有的问号 : 简单字符串模拟
1576. 替换所有的问号 : 简单字符串模拟
|
Unix C# 图形学
今天同事问我,如何将一串字符串中的数字取出来,此时不用正则表达式,更待何时。。。(Unity3D)
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。 例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。