LeetCode剑指Offer05.替换空格

LeetCode剑指Offer05.替换空格

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

示例 1:

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

题解:
1.常规方法
先遍历一遍数组,记录空格的个数count,再扩展字符数组长度为(s.size()+2*count),用双指针从后往前替换空格,一个指针指向扩展前的最后一位,一个指针指向扩展后的最后一位。

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

时间复杂度 O(n),空间复杂度O(1)
好处:
(1)不用申请新的数组
(2)从后向前相比于从前向后可避免替换时移动后面所有的元素。

2.开辟新的字符数组,利用string的方法完成。

不太好

猜你喜欢

转载自blog.csdn.net/qq_45035709/article/details/108505067