(字符串)替换空格

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

https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423

从后向前替换

两个指针:k指向原字符串长度的末尾(即'\0'处), p指向将空格替换为“%20”后字符串长度的末尾,从字符串最后一个字符向前遍历,逐个填入p指向的位置中。

O(n)

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int cnt = 0;
        for(int i=0; i<length; i++){
//统计字符串中空格的个数
if(str[i] == ' ') cnt++; } int len = length + cnt*2; //新长度为原长度+替换后增加的长度 int k = length, p = len; while(k>=0 && k<p){ if(str[k] != ' '){ str[p] = str[k]; p--; k--; } else{ str[p--] = '0'; str[p--] = '2'; str[p--] = '%'; k--; } } } };

 

总结:当合并两个数组(或字符串)时,若从前往后复制每个数字,需要重复移动数字多次,则可以考虑从后向前复制。

posted @ 2019-11-08 13:56  爱学英语的程序媛  阅读(304)  评论(0编辑  收藏  举报