请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)
package Day01;
public class ReplaceSpace {
public static void main(String[] args) {
ReplaceSpace replaceSpace1 = new ReplaceSpace();
System.out.println(replaceSpace1.replaceTheSpace("hell opslp ss s"));
}
public String replaceTheSpace(String str){
int oldLength = str.length();
String returnStr = new String();
for (int i = 0; i < oldLength; i++){
if (str.charAt(i) == ' '){ //每出现一次,就要加两个任意字符,扩容
returnStr = returnStr + "%20" ;
}
else {
returnStr = returnStr + str.charAt(i) ;
}
}
return returnStr;
}
}
很遗憾,执行用时:6 ms, 在所有 Java 提交中击败了5.13%的用户 / 内存消耗:38.4 MB, 在所有 Java 提交中击败了5.04%的用户
此种原因是由于,根据题意,遍历整个字符串是必须的,因为要 检验 每一个字符,由于 String类型
是 final
的,因此 String字符串
是不可修改的,我们的拼串操作都是 创建一个新对象,继续换解法。
解题思路
综上所述,大致实现过程如下:
创建一个 StringBuilder对象
(单线程情况下,建议使用StringBuilder,而非StringBuffer,因为后者的实现相当于前者的 加锁版)
遍历 目标字符串,填充StringBuilder对象:
遇到空格,填充 %20;
反之,填充 原字符
class Solution {
public String replaceSpace(String s) {
int oldLength = s.length();
StringBuilder newStr = new StringBuilder ();
for (int i = 0; i < oldLength; i ++){
if (s.charAt(i) == ' '){
newStr.append("%20");
}
else {
newStr.append(s.charAt(i));
}
}
return newStr.toString();
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户 / 内存消耗:36.3 MB, 在所有 Java 提交中击败了58.87%的用户