剑指offer编程题 -- 替换空格

题目描述:

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

分析:

注意这里是将长度为1的空格替换为长度为3的“%20”,字符串的长度增加。

1. 如果允许我们开辟一个新的数组来存放替换空格后的字符串,这道题目将非常简单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,当碰到空格时就在新字符串上填入“%20”,否则就复制原字符串上的内容;

2. 如果要求在原字符串上进行操作,并且保证原字符串有足够长的空间来存放替换后的字符串,如果采用从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,因此采用从后往前替换字符串。

1)遍历原字符串,找出字符串的长度length以及其中的空格数量blank_number;

2)根据length和blank_number计算新字符串的长度。

3)设置两个指针point1 和point2分别指向原字符串和新字符串的末尾位置,

如果point1指向的内容不为空格,那么将内容赋值给point2指向的位置;

如果point1指向的内容为空格,那么从point2开始复制“02%”;

直到point1 == point2 时表示字符串中的所有空格都已经替换完毕。

 

class Solution {

public:

    void replaceSpace(char *str,int length) {

         int str_size; //原字符串的长度

         int blankNumber = 0; //空格的数量

         for(str_size = 0;str[str_size] != '\0';str_size++){

             if(str[str_size] == ' '){

                 blankNumber++;

             }

         }

         

        int newStr_size = blankNumber * 2 + str_size;

        if (newStr_size > length){

            return ;

        }

        str[newStr_size] = '\0';

        int p1 = str_size - 1;

        int p2 = newStr_size - 1;

        while(p1 >= 0 && p1 != p2){

            if(str[p1] == ' '){

                str[p2--] = '0';

                str[p2--] ='2';

                str[p2--] = '%';

            }

            else{

                str[p2--] = str[p1];

            }

            p1--;

        }

        

    }

};

运行时间:4ms

占用内存:456K

 

参考链接:

https://www.cnblogs.com/codingmengmeng/p/5857143.html

 

猜你喜欢

转载自blog.csdn.net/mmg188/article/details/84940952