替换空格

替换空格

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

  1. 题目难度:二星
  2. 考察点:字符串
  3. 题解

题解: 逆向遍历

  1. 分析:由于函数返回为void,说明此题不能另外开辟数组,需要in-place操作。我们知道字符串的遍历无非是从左到右和从右到左两种。
    1)如果从左到右,会发现如果遇到空格,会将原来的字符覆盖。于是,此方法不行。
    2)那么就考虑从右向左,遇到空格,就填充“20%“,否则将原字符移动应该呆的位置。
  2. 具体过程如图所示:
  • length为原字符串最后一个字符的位置,new_lngth为结果字符串的最后一个位置
  1. 代码:
    class Solution {
    public:
     void replaceSpace(char *str,int length) {
         if (str == nullptr || length <= 0) return; // 养成良好习惯,判空操作
         int cnt = 0;  // 空格的个数
         for (int i=0; i != length; ++i) {
             if (str[i] == ' ') ++cnt;
         }
         if (!cnt) return; // 没有空格,直接返回
         int new_length = length+cnt*2;
         for (int i=length; i >= 0; --i) {
             if (str[i] == ' ') {
                 str[new_length--] = '0';
                 str[new_length--] = '2';
                 str[new_length--] = '%';
             }
             else {
                 str[new_length--] = str[i];
             }
         }
     }
    };
  2. 复杂度
    时间复杂度:O(length)
    空间复杂度:O(1)
全部评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务