程序员面试金典第一章:数组与字符串(4) 空格替换

来源:互联网 发布:java web 打印插件 编辑:程序博客网 时间:2024/04/30 23:20

1.1 题目描述

请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。

测试样例:
“Mr John Smith”,13
返回:”Mr%20John%20Smith”
”Hello World”,12
返回:”Hello%20%20World”

1.2解题思路

思路1:先遍历原来的字符串,找出空格的个数count, 从而得出新的字符串长度newLength = length + 2 * count,最后从后向前写入字符,如果是空格,那么写入%20,否则写入原字符时间复杂度O(n) 空间复杂度O(1)
class Replacement {public:    string replaceSpace(string iniString, int length) {        // write code here        if(length == 0)            return iniString;        int spaceCount = 0;        for(int i = 0; i < length; ++i) {            if(iniString[i] == ' ')                ++spaceCount;        }        if(spaceCount == 0)            return iniString;        int newLength = length + 2 * spaceCount;        iniString.resize(newLength + 1);        iniString[newLength] = '\0';        for(int i = length - 1; i >= 0 && newLength - 1 > i; --i) {            if(iniString[i] == ' ') {                iniString[newLength - 1] = '0';                iniString[newLength - 2] = '2';                iniString[newLength - 3] = '%';                newLength -= 3;            }            else {                iniString[newLength - 1] = iniString[i];                -- newLength;            }        }        return iniString;    }};};

tips:1.长度为0,直接返回
2.没有空格,直接返回
3.别忘记在新的末尾加上‘\0’
4.当当前需要写入的位置与length一致,说明前面没空格,可以直接结束

0 0
原创粉丝点击