【剑指 Offer】005. 替换空格
题目描述#
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."限制:
0 <= s 的长度 <= 10000
方法一:从前往后,O(N^2)#
从前往后遍历,遇到空格替换成 '%20',由于 C++ 字符串可以修改,C++ 此时需要 O(N^2),遍历 O(N)移动 O(N),而 python 和 java 字符串是不能修改的,需要 O(N) 额外空间。
// C++
string replaceSpace(string s)
{
string res;
for(auto c : s)
{
if(c == ' ')
{
res.push_back('%');
res.push_back('2');
res.push_back('0');
}else
res.push_back(c);
}
return res;
}
def replaceSpace(s: str) -> str:
res = []
for c in s:
if c == ' ':
res.append('%')
res.append('2')
res.append('0')
else:
res.append(c)
return ''.join(res)
方法二:从后往前遍历,O(N)#
主要思想:先遍历一遍统计字符串有多少空格,再对字符串扩容后从后往前遍历,同时交换字符位置或增添'%20'替换空格。
// C++
string replaceSpace2(string s)
{
int count = 0, len = s.size();
for (char c : s)
{
if (c == ' ')
count++;
}
s.resize(len + 2 * count);
for (int i = len - 1, j = s.size() - 1; i < j; i--, j--)
{
if (s[i] != ' ')
s[j] = s[i];
else
{
s[j] = '0';
s[j - 1] = '2';
s[j - 2] = '%';
j -= 2;
}
}
return s;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理