题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。To do it!
示例输入: s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000
题解
遍历添加
1 2 3 4 5 6 7 8 9 10 11
| class Solution { public: string replaceSpace(string s) { string res = ""; for (char c : s) { if (c == ' ') res.append("%20"); else res.push_back(c); } return res; } };
|
时间复杂度:O(n),空间复杂度:O(n)
原地扩容修改
在 C++ 中,string 被设计成可变的类型,可以在不新建字符串的情况下实现原地修改。由于需要将一个字符的 空格 替换为三个字符的 “%20
”,新字符串的长度 = 原字符串长度 + 2 * 空格的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public: string replaceSpace(string s) { int spaceCount = 0; for (char c : s) if (c == ' ') ++spaceCount; int len = s.size(); s.resize(len + spaceCount * 2); int i = len - 1, j = s.size() - 1; while (i < j) { if (s[i] == ' ') { s[j--] = '0'; s[j--] = '2'; s[j--] = '%'; } else { s[j--] = s[i]; } --i; } return s; } };
|
时间复杂度:O(n),空间复杂度:O(1)