首页 > 其他 > 详细

剑指 Offer 05:替换空格题解及注意事项

时间:2020-10-04 20:01:31      阅读:34      评论:0      收藏:0      [点我收藏+]

题目

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。要求:空间复杂度 O(1)

 

示例 1:

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

限制:

0 <= s 的长度 <= 10000

思路

题目要求空间复杂度为O(1),所以不能通过新建字符串的形式添加,我们需要在原字符串上实现原地修改:

  1. 因为要将每个" "都更改为“%20”,每替换一次字符串长度增加2,设字符串长度为len、总共有cnt个空格,那么修改后的字符串长度newLen = len+2*cnt
  2. 设立两个指针,分别指向len-1,newLen-1,即旧字符串和新字符串的最后一个位置,倒序遍历字符串:
    1. 当s[i] != ‘ ‘ 时,令s[j]=[i]
    2. 当s[i] == ‘ ‘时:
      1. s[j] = ‘0‘
      2. s[j-1] = ‘2‘
      3. s[j-2] = ‘%‘
      4. j = j - 2 ; //额外赋了两个值,所以向前移动两个单元

    直到 i == j(代表i之前已无空格);

 

C++代码

class Solution{
public:
    string replaceSpace(string s)
{
        int len = s.size();
        int cnt = 0;
        for (int i = 0; i < len; ++i){
            if (s[i] ==  )cnt++;
        }
        s.resize(len + 2 * cnt);
        for (int i = len - 1, j = s.size() - 1; i < j && i >= 0; --i, --j){
            if (s[i] !=  ){
                s[j] = s[i];
            }else{
                s[j] = 0;
                s[j - 1] = 2;
                s[j - 2] = %;
                j -= 2;
            }
        }
        return s;
    }
};

 

剑指 Offer 05:替换空格题解及注意事项

原文:https://www.cnblogs.com/tao10203/p/13767487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!