本问题对应的 leetcode 原文链接:剑指 Offer 05. 替换空格
问题描述
请实现一个函数,把字符串 s
中的每个空格替换成”%20″。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
解题思路
视频讲解直达: 本题视频讲解
代码实现
// Java中的常规做法
// public String replaceSpace(String s) {
// // 常规
// StringBuilder builder = new StringBuilder();
// for(int i = 0; i < s.length(); i++){
// if(s.charAt(i) == ' '){
// builder.append("%20");
// } else {
// builder.append(s.charAt(i));
// }
// }
// return builder.toString();
// }
//这个做法是模拟原地扩容的,但是Java并不支持扩容,所以我们只是联系一下代码怎么写
public String replaceSpace(String s) {
// 统计有多少空格
int count = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' '){
count ++;
}
}
char[] res = new char[s.length() + count * 2];
int k = res.length - 1;
// 从右往左遍历
for(int i = s.length() - 1; i >= 0; i--){
// 从右往左移动字符与替换字符
if(s.charAt(i) == ' '){
res[k--] = '0';
res[k--] = '2';
res[k--] = '%';
} else {
res[k--] = s.charAt(i);
}
}
return new String(res);
}
Python
class Solution(object):
def replaceSpace(self, s):
"""
:type s: str
:rtype: str
"""
count = 0
for i in s:
if i == ' ':
count += 1
res = [' '] * (count * 2 + len(s))
k = len(res) - 1
for i in range(len(s)-1, -1, -1):
if s[i] == ' ':
res[k] = '0'
res[k-1] = '2'
res[k-2] = '%'
k -= 3
else:
res[k] = s[i]
k -= 1
return ''.join(res)
C++
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] == ' '){
count ++;
}
}
int len = s.size() + count * 2;
string res(len, ' ');
int k = len - 1;
for(int i = s.size() - 1; i >= 0; i--){
if(s[i] == ' '){
res[k--] = '0';
res[k--] = '2';
res[k--] = '%';
} else {
res[k--] = s[i];
}
}
return res;
}
};
Go
func replaceSpace(s string) string {
count := 0
for _, val := range s {
if val == ' ' {
count++
}
}
res := make([]byte, len(s)+count*2)
k := len(res) - 1
for i := len(s) - 1; i >= 0; i-- {
if s[i] == ' ' {
res[k] = '0'
res[k-1] = '2'
res[k-2] = '%'
k -= 3
} else {
res[k] = s[i]
k--
}
}
return string(res)
}
JS
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
// 统计有多少空格
let count = 0;
for(let i = 0; i < s.length; i++){
if(s.charAt(i) == ' '){
count ++;
}
}
let res = new Array(s.length + count * 2);
let k = res.length - 1;
// 从右往左遍历
for(let i = s.length - 1; i >= 0; i--){
// 从右往左移动字符与替换字符
if(s.charAt(i) == ' '){
res[k--] = '0';
res[k--] = '2';
res[k--] = '%';
} else {
res[k--] = s.charAt(i);
}
}
return res.join('');
};