[每日一题] 第十题:替换空格
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
题解
方法一:字符数组
由于每次替换从 1 个字符变成 3 个字符,使得字符数组可方便的进行替换,建立字符数组的长度为 s
的长度的 3 倍,这样可以保证字符数据可以容纳所以替换后的字符。
- 获得
s
的长度length
- 创建字符数组
array
,其长度为length * 3
- 初始化
size=0
,size
表示替换后字符串的长度 - 从左到右遍历字符串
s
个人理解
- 获取字符串的单个元素使用
s.charAt()
方法。 char
数组替换为string
数组有如下方法public String(char value[], int offset, int count)
。- 下标移动:遇到空格的时候,要移动是三个下标。
- 在 Java 等语言中,字符串都被设计成不可变的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。
方法二:append
初始化一个 StringBuilder,记为
res
;遍历字符串
s
中的每个字符c
;- 当
c
为空格时:向res
后添加字符串"%20"
; - 当
c
不为空格时:向res
后添加字符c
;
- 当
将列表
res
转化为 String 类型并返回。
代码
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();
}
}
个人理解
- Character: Character 类用于对单个字符进行操作。Character 类在对象中包装一个基本类型
char
的值。 - StringBuilder: StringBuilder 是一个可变对象,可以预分配缓冲区,这样,往
StringBuilder
中新增字符时,不会创建新的临时对象。 - 类型转换: 记得最后要将
StringBuilder
类型结果转化为String
类型。
复杂度分析
- 时间复杂度O(N): 遍历使用 O(N),每轮添加(修改)字符操作使用 O(1)。
- 空间复杂度O(N): Java 新建的 StringBuilder 使用了线性大小的额外空间。
题解来源
作者:jyd
链接:leetcode-cn.com/problems/ti-huan-k...
来源:力扣(LeetCode)
来源
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/ti-huan-k...
本作品采用《CC 协议》,转载必须注明作者和本文链接