请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路一:不要求原地修改的话可以用这种方法。时间复杂度和空间复杂度都是O(n)
。
class Solution {
public:
string replaceSpace(string s) {
string ans;
for(int i =0;i<s.size();i++)
{
if(s[i]==' ')
{
ans += "%20";
}
else
{
ans += s[i];
}
}
return ans;
}
};
思路二:参考剑指offer 53页的思路,其空间复杂度为O(1)
,时间复杂度为O(n)
,其思路为首先遍历一次原字符串,找出空格的个数,因为在替换后, 每替换一个空格长度比原来就增长2
,所以我们首先将替换后的长度准备好,再利用两个指针,一个P1
指向原来旧长度的末尾,一个P2
指向新长度的末尾,然后P1
从后向前遍历,如果不是空格,直接移动到P2
的位置,如果是空格,则在P2
指向的位置前插入%20
。
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
for(const auto& c : s)
{
if(c == ' ')
count++;
}
int P1 = s.size();//原来长度
s.resize(count*2+s.size());//新长度
int P2 = s.size();
while(P1 >= 0)
{
if(s[P1] != ' ')
{
s[P2] = s[P1];
P1--;
P2--;
}
else
{
s[P2--] = '0';
s[P2--] = '2';
s[P2--] = '%';
P1--;
}
}
return s;
}
};