Shirlies
宁静专注认真的程序媛~

题目:

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

链接:

http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

答案:

暴力解决就是:从头到尾顺序遍历,每遇到一个空格,将后面的字符串往后移动2个位置,然后将空格替换为%20,每次都要移动字符串,最坏是O(n^2)。

变通的解决是:首先遍历一次,获得所有空格的数量,酱紫就知道最后的结果字符串的长度了,然后从后开始逆向遍历字符串,并往后移动即可,时间效率是O(n)。

代码:

我写的代码跟剑指offer上的代码有点不一样,哈哈,仅供参考,个人还是喜欢剑指offer上的代码。

 1 //length为牛客系统规定字符串输出的最大长度,固定为一个常数
 2 class Solution {
 3 public:
 4     void replaceSpace(char *str,int length) {
 5         int spaceNum = 0;
 6         int strNum = 0;
 7         char *tmpStr = str;
 8         while(*tmpStr != '\0'){
 9             if(*tmpStr == ' '){
10                 ++ spaceNum;
11             }
12             ++ strNum;
13             ++ tmpStr;
14         }
15         
16         int sumNum = strNum + 2 * spaceNum;
17         if(sumNum > length){
18             return;
19         }
20         
21         str[sumNum] = '\0';
22         int sumIndex = sumNum - 1;
23         while(sumIndex >= 0){
24             if(str[sumIndex - 2 * spaceNum] == ' '){
25                 str[sumIndex--] = '0';
26                 str[sumIndex--] = '2';
27                 str[sumIndex--] = '%'; 
28                 -- spaceNum;
29             }else{
30                 str[sumIndex] = str[sumIndex - 2 * spaceNum];
31                 --sumIndex;
32             }
33         }
34         
35         cout << str << endl;
36     }
37 };
View Code

 

posted on 2016-08-15 09:12  Shirlies  阅读(282)  评论(0)    收藏  举报