01.03、[简单] URL 化
1、题目描述
URL化。编写一种方法,将字符串中的空格全部替换为%20
。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java
实现的话,请使用字符数组实现,以便直接在数组上操作。)
2、解题思路
- 计算空格数量:首先,我们需要遍历字符串的 “真实” 部分,统计其中空格的数量。每遇到一个空格,就需要在原字符串的末尾预留两个额外的空间来插入字符
%20
。 - 确定新字符串的长度:根据空格的数量,计算出转换后字符串的最终长度。
- 从后向前替换:从字符串的末尾开始进行替换操作,避免在前向遍历时覆盖未处理的部分。我们将从后向前遍历字符串,如果遇到空格,则在末尾插入
%20
,否则直接复制当前字符。 - 返回结果:最后返回修改后的字符串。
3、代码实现
class Solution {
public:
string replaceSpaces(string S, int length) {
// 统计真实字符串中空格的数量
int count = 0;
for (int i = 0; i < length; i++) {
if (S[i] == ' ') {
count++;
}
}
// 计算替换后的字符串的总长度
int url_len = length + 2 * count;
S.resize(url_len); // 调整字符串大小以容纳新增的字符
// 双指针,从后往前遍历字符串进行替换
int s_cur = length - 1; // 指向原字符串的末尾
int url_cur = url_len - 1; // 指向替换后字符串的末尾
while (s_cur >= 0) {
if (S[s_cur] != ' ') {
// 如果当前字符不是空格,直接复制到新位置
S[url_cur] = S[s_cur];
s_cur--;
url_cur--;
} else {
// 如果遇到空格,替换为 "%20"
S[url_cur] = '0';
S[url_cur - 1] = '2';
S[url_cur - 2] = '%';
url_cur -= 3;
s_cur--;
}
}
return S; // 返回替换后的字符串
}
};
4、总结
这道题的关键在于利用双指针从后向前处理字符串,从而避免在替换时覆盖未处理的部分。通过精确的空间计算和优化的遍历方式,我们能够高效地完成字符串的 URL 化操作。这种方法的时间复杂度为 O(n),其中 n 是字符串的长度。