题目链接

题目描述

请实现一个函数,把字符串 s 中的每个空格替换成”%20”。

示例

示例1:

输入:s = “We are happy.” 输出:“We%20are%20happy.”

提示

  • 0 <= s 的长度 <= 10000

    思路

    双指针

    首先将字符串扩充到替换后的大小。
    设置两个指针 leftright ,分别指向原字符串末尾和新字符串末尾。

  • left 所指的字符不为空格,则将其后移到 right

  • left 所指的字符是空格,则从 right 开始的向前依次填充 '0', '2', '%'

    题解

    1. class Solution {
    2. public:
    3. string replaceSpace(string s) {
    4. int count = 0;
    5. int oldSize = s.size();
    6. for (int i = 0; i < s.size(); ++i) {
    7. if (s[i] == ' ') {
    8. ++count;
    9. }
    10. }
    11. s.resize(s.size() + count * 2);
    12. int newSize = s.size();
    13. for (int right = newSize - 1, left = oldSize - 1; left < right; --right, --left) {
    14. if (s[left] != ' ') {
    15. s[right] = s[left];
    16. } else {
    17. s[right] = '0';
    18. s[right - 1] = '2';
    19. s[right - 2] = '%';
    20. right -= 2;
    21. }
    22. }
    23. return s;
    24. }
    25. };

    复杂度分析

  • 时间复杂度:05.替换空格 - 图1

  • 空间复杂度:05.替换空格 - 图2