题目分析:[[EVD]] - 剑指 Offer 05.替换空格https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
简单描述:
- 字符串 s 中的每个空格替换成"%20"
限制🚫
- 0 <= s 的长度 <= 10000
示例:
输入:s = "We are happy."
输出:"We%20are%20happy."
解题思路:
思路:
- 1. 利用string库函数replace()直接替换 #[[C++ STL]]
- 2. 利用resize()函数,重分配string空间,然后原地修改 #[[C++ STL]]
效率:
- 时间复杂度
- 空间复杂度
代码:
- 1.利用string库函数replace()直接替换
class Solution
{
public:
string replaceSpace(string s)
{
string ss = "%20";
for (int i = 0; i < s.size(); i++)
if (s[i] == ' ')
s.replace(i, 1, ss);
return s;
}
};
- 2.原地修改
class Solution
{
public:
string replaceSpace(string s)
{
/*cnt计算空格数,并扩增s的长度*/
int cnt = 0, s_len = s.size();
for (int i = 0; i < s.size(); i++)
if (s[i] == ' ')
cnt++;
s.resize(s.size() + cnt * 2);
/*i(新串),j(旧串)双指针从后往前替换*/
string ss = "02%"; /*将 %20 反序便于从后往前替换*/
for (int i = s.size() - 1, j = s_len - 1; i > j; i--, j--)
{
if (s[j] != ' ')
s[i] = s[j];
else
{
for (int k = 0; k < ss.size(); k++)
s[i - k] = ss[k];
i -= ss.size() - 1;
}
}
return s;
}
};