英文原文
Write a method to replace all spaces in a string with '%20'. You may assume that the string has sufficient space at the end to hold the additional characters,and that you are given the "true" length of the string. (Note: If implementing in Java,please use a character array so that you can perform this operation in place.)
Example 1:
Input: "Mr John Smith ", 13 Output: "Mr%20John%20Smith"
Example 2:
Input: " ", 5 Output: "%20%20%20%20%20"
Note:
0 <= S.length <= 500000
中文题目
URL化。编写一种方法,将字符串中的空格全部替换为%20
。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java
实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"
示例 2:
输入:" ", 5 输出:"%20%20%20%20%20"
提示:
- 字符串长度在 [0, 500000] 范围内。
通过代码
高赞题解
解法一
使用StringBuilder
解决,逐渐遍历字符串中的字符,如果不是空格就把当前字符加入到StringBuilder
中,如果是字符就把"%20"
加入到StringBuilder
中,代码如下
public String replaceSpaces(String S, int length) {
StringBuilder stringBuilder = new StringBuilder();
//逐渐遍历字符串
for (int i = 0; i < length; i++) {
//如果不是空格就加入到StringBuilder中,如果是空格
//就把"%20"加入到StringBuilder中
char ch = S.charAt(i);
if (ch == ' ') {
stringBuilder.append("%20");
} else {
stringBuilder.append(ch);
}
}
return stringBuilder.toString();
}
还可以使用java提供的方法,
public String replaceSpaces(String S, int length) {
return S.substring(0, length).replaceAll(" ", "%20");
}
但题中说了如果使用java实现的话,要使用字符数组实现,所以下面代码在这里不合适,我们来把它改一下
解法二
也是逐渐遍历字符串中的所有字符,如果遇到空格,就把他转化为"%20"
,只不过这里是一数组的形式来计算。
public String replaceSpaces(String S, int length) {
//先把字符串转化为字符数组
char[] chars = S.toCharArray();
int index = chars.length - 1;
for (int i = length - 1; i >= 0; i--) {
//如果遇到空格就把他转化为"%20"
if (chars[i] == ' ') {
chars[index--] = '0';
chars[index--] = '2';
chars[index--] = '%';
} else {
chars[index--] = chars[i];
}
}
return new String(chars, index + 1, chars.length - index - 1);
}
看一下运行结果
我把部分算法题整理成了PDF文档,截止目前总共有900多页,大家可以下载阅读
链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
如果觉得有用就给个赞吧,还可以关注我的LeetCode主页查看更多的详细题解
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
47655 | 82380 | 57.8% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|