【剑指Offer】05. 替换空格 解题报告 (Python & C++ & Java)
- 作者: 负雪明烛
- id: fuxuemingzhu
- 个人博客:http://fuxuemingzhu.cn/
- 个人微信公众号:负雪明烛
题目地址:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成 "%20"
。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
解题方法
由于题目是让我们实现替换的函数,所以不能直接使用 repalceAll()
方法。
这个题目的解题思路有两种:
- 新建可变长度的容器:Java 的 StringBuilder/StringBuffer,C++ 的 string/vector,Python 的 string 等。
- 原地修改:比如 C++ 的 string 是支持扩容的。
新建可变长度的容器更为简单:遍历 str
,当遇到空格的时候,直接给结果里面 append
上 "%20"
;否则 append 当前的字符。
而原地修改的难度要大一点。
方法一:新建可变长度的容器
可变长度的比如 Java 的 StringBuilder/StringBuffer,C++ 的 string/vector,Python 的 string 等。
Java 代码如下:
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer ans = new StringBuffer();
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == ' '){
ans.append("%20");
}else{
ans.append(str.charAt(i));
}
}
return ans.toString();
}
}
C++ 代码如下:
class Solution {
public:
string replaceSpace(string s) {
string res;
for (char c : s) {
if (c != ' ') {
res += c;
} else {
res += "%20";
}
}
return res;
}
};
Python 代码如下:
class Solution(o bject):
def replaceSpace(self, s):
res = ""
for c in s:
if c == ' ':
res += "%20"
else:
res += c
return res
方法二:原地修改
原地修改需要对原始的 s 进行扩容,扩容的大小当然是原始的 s.size() + spaceCount * 2
。
遍历原始的 s 的时候,需要注意,由于是原地修改,所以如果我们从前向后遍历的话,会导致后面的字符被覆盖掉。因此只能对 s 从后向前遍历。
C++ 代码如下。
class Solution {
public:
string replaceSpace(string s) {
if (s.empty()) return s;
int len = s.size();
int spaceCount = 0;
for (char c : s) {
if (c == ' ')
spaceCount ++;
}
s.resize(s.size() + spaceCount * 2);
for (int i = len - 1, j = s.size() - 1; i >= 0; --i, --j) {
if (s[i] == ' ') {
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
j -= 2;
} else {
s[j] = s[i];
}
}
return s;
}
};
日期
2017 年 4 月 20 日
2021 年 7 月 21 日 —— 郑州暴雨,希望平安!
【剑指Offer】05. 替换空格 解题报告 (Python & C++ & Java)的更多相关文章
- 菜鸟刷题路:剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格 class Solution { public String replaceSpace(String s) { StringBuilder str = new St ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- 剑指 Offer 05. 替换空格
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/ 标签:字符串 题目 请实现一个函数,把字符串 s 中的每个空格替换成"%2 ...
- 【剑指Offer】反转链表 解题报告(Python)
[剑指Offer]反转链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...
- 【剑指Offer】矩阵覆盖 解题报告(Python)
[剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...
- 【剑指Offer】扑克牌顺子 解题报告(Python)
[剑指Offer]扑克牌顺子 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...
- 【剑指Offer】丑数 解题报告
[剑指Offer]丑数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: ...
- 【剑指Offer】序列化二叉树 解题报告(Python)
[剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 《剑指offer》替换空格
本题来自<剑指offer> 替换空格 题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are% ...
随机推荐
- Markdown—.md文件是什么?怎么打开?
md全称markdown,markdown也是一种标记语言. md文件其实可以用常用的文本编辑器都可以打开. 用记事本打开,把markdown文件拖到记事本图标上就可以打开 . 用 subli ...
- RocketMQ这样做,压测后性能提高30%
从官方这边获悉,RocketMQ在4.9.1版本中对消息发送进行了大量的优化,性能提升十分显著,接下来请跟着我一起来欣赏大神们的杰作. 根据RocketMQ4.9.1的更新日志,我们从中提取到关于消息 ...
- 从Redis分布式缓存实战入手到底层原理分析、面面俱到覆盖大厂面试考点
概述 官方说明 Redis官网 https://redis.io/ 最新版本6.2.6 Redis中文官网 http://www.redis.cn/ 不过中文官网的同步更新维护相对要滞后不少时间,但对 ...
- 外网无法访问hdfs文件系统
由于本地测试和服务器不在一个局域网,安装的hadoop配置文件是以内网ip作为机器间通信的ip. 在这种情况下,我们能够访问到namenode机器, namenode会给我们数据所在机器的ip地址供我 ...
- Hive(六)【分区表、分桶表】
目录 一.分区表 1.本质 2.创建分区表 3.加载数据到分区表 4.查看分区 5.增加分区 6.删除分区 7.二级分区 8.分区表和元数据对应得三种方式 9.动态分区 二.分桶表 1.创建分桶表 2 ...
- oracle extract
select extract(year from systimestamp) year ,extract(month from systimestamp) month ...
- 设置linux下oracle开机自启动
1.修改配置文件,vi /etc/oratab orcl:/u01/app/oracle/product/11.2.0/db_1:Y 2.创建启动文件,/etc/init.d/ #!/bin/sh # ...
- JS中操作JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- 关于requests.exceptions.ConnectionError: HTTPSConnectionPool的问题
错误如下: raise ConnectionError(e, request=request)requests.exceptions.ConnectionError: HTTPSConnectionP ...
- PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台
定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...