码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指Offer】面试题05-替换空格

时间:2020-02-12 22:33:59      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:位置   两个指针   剑指offer   amp   public   space   输出   输入   ret   

题目

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

示例 1:

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

限制:
0 <= s 的长度 <= 10000

思路:双指针

暴力方法,从前向后遍历,遇到空格就替换,则每次替换需要移动空格后面O(n)个字符,所以总时间复杂度为O(n^2)。
我们可以先计算出空格数,然后可得替换后新串总长度,设两个指针i和j分别指向原来字符串末尾和新串末尾,向前移动指针,如果遇到空格就替换,否则将原来字符移到新的位置。

代码

时间复杂度:O(n)
空间复杂度:O(1)

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

【剑指Offer】面试题05-替换空格

标签:位置   两个指针   剑指offer   amp   public   space   输出   输入   ret   

原文地址:https://www.cnblogs.com/galaxy-hao/p/12301113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!