替换空格( replace方法、字符数组、StringBuilder)
替换空格
题目描述:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
解题思路:
这道题其实不难,运用java来做有很多种方法,无非就是把字符串 s 中的每个空格替换成"%20"而已。
方法一(java replace方法):
这个方法极其简单!
replace() 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。
语法
public String replace(char oldChar,
char newChar)
参数
- oldChar – 原字符。
- newChar – 新字符。
返回值
替换后生成的新字符串。
代码:
class Solution {
public String replaceSpace(String s) {
return s.replace(" ","%20");
}
}
方法二(字符数组):
首先,创建字符数组 array
,其长度为 s.length() * 3
,初始化 size
为 0
,size
表示替换后的字符串的长度;
接着遍历字符串 s
,获得 s
的当前字符 c
,判断如果字符 c
是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0'
,并将 size 的值加 3,如果字符 c
不是空格,则令 array[size] = c
,并将 size
的值加 1;
最后,遍历结束之后,size
的值等于替换后的字符串的长度,从 array
的前 size
个字符创建新字符串,并返回新字符串。
复杂性分析
- 时间复杂度:O(n)。遍历字符串
s
一遍。 - 空间复杂度:O(n)。额外创建字符数组,长度为
s
的长度的 3 倍。
代码:
class Solution {
public String replaceSpace(String s) {
char[] array = new char[s.length() * 3];
int size = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == ' ') {
array[size] = '%';
array[size+1] = '2';
array[size+2] = '0';
size+=3;
} else {
array[size] = c;
size++;
}
}
String newStr = new String(array, 0, size);
return newStr;
}
}
方法三(StringBuilder):
**首先,**初始化一个 StringBuilder ,记为 res
;
**然后,**遍历列表 s
中的每个字符s.charAt(i)
:
当 s.charAt(i)
为空格时:向 res
后添加字符串 “%20
”;
当 s.charAt(i)
不为空格时:向 res
后添加字符s.charAt(i)
;
**最后,**将列表 res
转化为字符串并返回。
复杂度分析:
时间复杂度 O(N): 遍历使用 O(N),每轮添加(修改)字符操作使用 O(1) ;
空间复杂度 O(N) : Java 新建的 StringBuilder 都使用了线性大小的额外空间。
代码:
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)==' '){
res.append("%20");
}else {
res.append(s.charAt(i));
}
}
return res.toString();
}
}
本文地址:https://blog.csdn.net/weixin_43508822/article/details/107357695