1.题目
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
2.思路与实现
1.字符串缓冲区:建立一个字符串缓冲区对象,遍历字符串,遇到空格向缓冲区中加入“%20”,否则向缓冲区中添加对应字符
时间N
空间N
class Solution {
public String replaceSpace(String s) {
StringBuffer cur = new StringBuffer();
for(int i = 0; i < s.length(); i++)
{
if(s.charAt(i) == ' ')
cur.append("%20");
else
cur.append(s.charAt(i));
}
return cur.toString();
}
}
3.总结思路与实现
其他方法:
2.字符数组:建立一个三倍大小的字符数组(因为一个空格对应三个字符,产生的字符串最多是原来长度的三倍),遍历字符串,遇到空格字符向字符数组中一次添加’%’ ‘2’ ‘0’,否则添加对应字符
时间N
空间N
class Solution {
public String replaceSpace(String s) {
char[] ch = new char[s.length() * 3];
int j = 0;
for(int i = 0; i < s.length(); i++)
{
if(s.charAt(i) == ' ')
{
ch[j++] = '%';
ch[j++] = '2';
ch[j++] = '0';
}
else
ch[j++] = s.charAt(i);
}
return new String(ch, 0, j);
}
}
- 注意最后不能直接将字符数组转化为字符串,因为原字符数组是字符串长度的三倍,如果字符串不全是空格,字符数组不会被填满,后面将出现\u0000
3.replace()方法、replaceAll()
class Solution {
public String replaceSpace(String s) {
return s.replace(" ", "%20");
}
}
4.相关知识
- String类的构造方法:new String(char[ ] ch, int offset, int count)从字符数组中按指定角标offset为开端,count为个数,构成字符串
- String类:replace(old, new)将旧字符串中的所有old(可以是字符也可以是字符串,但new要与其相同类型)替换为new
- String类:replaceAll(regex),基于正则表达式的替换,但也兼容replace()形式的替换