替换空格

时间限制:1秒 空间限制:32768K 热度指数:938460
本题知识点: 字符串

 算法知识视频讲解

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
解题思路有两个:
  1. 从前向后替换,这样的话每找到一个空格,都会将空格后的所有字符向后移动2个距离,这样的话计算量比较大,算法的复杂性大,我自己就使用的这种方法。而且,由于很久没有练习算法题,所以一开始直接str[i] = "%20",忘记一个字符不能用字符串来替代。
  2. class Solution {
    public:
        void replaceSpace(char *str,int length) {
            
            for(int i = 0; i < length-1;){
                if(str[i] == ' '){
                    for(int j = length - 1; j > i; j--){
                        str[j+2] = str[j];
                    }
                 str[i] = '%';
                 str[i+1] = '2';
                 str[i+2] = '0';
                 i = i + 3;
                    
                }
                else{
                    i++;
                }
    
            }
    
        }
    };

     

  3. 标准的简单方法是,所有的字符只需要移动一次即可。即首先从前向后记录一下空格的个数。然后从后向前进行空格的替换,这样的话就可以每个字符只移动一次,与第一种方法相比降低了计算复杂度。
    链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
    来源:牛客网
    
    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            int count=0;
            for(int i=0;i<length;i++){
                if(str[i]==' ')
                    count++;
            }
            for(int i=length-1;i>=0;i--){
                if(str[i]!=' '){
                    str[i+2*count]=str[i];
                }
                else{
                    count--;
                    str[i+2*count]='%';
                    str[i+2*count+1]='2';
                    str[i+2*count+2]='0';
                }
            }
        }
    };

     

posted @ 2019-04-19 11:13  三公分阳光  阅读(181)  评论(0编辑  收藏  举报