剑指offer刷题笔记——替换空格

yangxiaodong 2019-01-12 PM 43℃ 0条

题目描述

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

问题分析

根据问题,我们可以简单的有一个大概的思路。首先需要统计空格数量,替换应该从字符串尾端进行,新的字符串长度需要根据空格的数目重新确认

思路

  1. 首先统计字符串的空格数目,记为count
  2. 根据题目要求,空格替换为%20,那么原字符串长度为len, 新字符串长度为newlen = len + 2*count
  3. 如果题目给定长度length(表示可以申请的最大空间)小于newlen,则表示空间不足,返回即可
  4. 从len和newlen的尾端同时向前遍历,如果没有遇到空格,则直接赋值,若遇到空格,newlen先按照题目条件进行复制,然后继续遍历,直到其长度都为0结束。

代码

C++代码

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int orilen = 0, count = 0, i= 0;
        while(str[i] != '\0')
        {
            if(str[i] == ' ')
                count++;
            orilen++;
            i++;
        }
        int newlen = orilen + 2*count;
        if(newlen > length)
            return;
        while(orilen >= 0 && newlen> orilen)
        {
            if(str[orilen] == ' ')
            {
                str[newlen--] = '0';
                str[newlen--] = '2';
                str[newlen--] = '%';
            }
            else
            {
                str[newlen] = str[orilen];
                newlen--;
            }
            orilen--;
        }*/
        if(str == NULL||length<=0)
            return;
        int len = 0;
        int count = 0;
        int i=0;
        while(str[i]!='\0')
        {
            if(str[i]==' ')
                count++;
            len++;
            i++;
        }
         
        int newlen=len+count*2;
        if(length<newlen)
            return;
        int a=len;
        int b=newlen;
        while(a>=0&&b>=0)
        {
            if(str[a]==' ')
            {
                str[b--]='0';
                str[b--]='2';
                str[b--]='%';
            }
            else{
                str[b]=str[a];
                b--;
            }
            a--;
        }
        
    }
};
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~