4.替换空格

替换空格

1.题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

2.思路

1.先遍历一遍字符串统计出字符串的空格和字符串的长度,然后计算出替换之后的字符串长度为:new_len = str_len + space_num*2。
2.从字符串的后面开始复制和替换,首先准备两个指针p1和p2,p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾。接下来向前移动p1,逐个把它指向的字符复制到p2指向的位置,直到遇到空格,把p1向前移动1格,在p2之前插入“%20”,同时p2向前移动三格。
在这里插入图片描述

3.代码

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if(str == NULL || length<= 0){
            return;
        }
        int str_len = 0;
        int space_num = 0;
        //统计字符串的空格
        int i = 0;
        while(str[i] != '\0'){
            ++str_len;
            if(str[i] == ' '){
                space_num++;
            }
            i++;
        }
        int new_len = str_len + space_num*2;
        int p1 = str_len;
        int p2 = new_len;
        
        if(new_len > length){
            return;
        }
        
        while(p1 >= 0 && p1 < p2){
            if(str[p1] == ' '){
                str[p2--] = '0';
                str[p2--] = '2';
                str[p2--] = '%';
            }
            else{
                str[p2--] = str[p1]; 
            }
            p1--;
        }
	}
};

复杂度分析

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

发布了71 篇原创文章 · 获赞 0 · 访问量 806

猜你喜欢

转载自blog.csdn.net/jiangdongxiaobawang/article/details/103914472
今日推荐