前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客网-替换空格

牛客网-替换空格

作者头像
手撕代码八百里
发布2020-07-28 17:34:52
8320
发布2020-07-28 17:34:52
举报
文章被收录于专栏:猿计划猿计划

题目描述

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

解题1,不考虑时间空间复杂度,暴力解题

暴力的解题思路很简单,你可能会想到:有空格的时候直接换成"%20"就行了呗。

代码语言:javascript
复制
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String s = "";

        for (int i = 0; i <str.length() ; i++) {

            if(str.charAt(i)==' ')
                s = s+"%20";
            else
                s = s + str.charAt(i);
            
        }

        return s;
    }
}

解题2

看到解题1,可能会认为很简单,测试结果也对,但是并不是这样子的。

题目是替换空格,那就是在原来的基础上进行替换,而不是重新组合

来自比特蛋哥:

代码语言:javascript
复制
//字符串操作问题
//解决思路:
//虽然是替换问题,但是生成的字符串整体变长了.
//因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题
//移动方向一定是向后移动,所以现在的问题无非是移动多少的问题
//因为是 ' ' -> "%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度
//所以:new_length = old_length + 2*n
//最后,定义新老索引(或者指针),各自指向新老空间的结尾,然后进行old->new的移动
//如果是空格,就连续放入“%20”,其他平移即可。
//当然,C++和Java都有很多容器,也可以从前往后通过开辟空间来进行解决。也就是使用空间来换取时间。
//但是,我们最好不要在当前场景下这么做
代码语言:javascript
复制
public class Solution {
    public String replaceSpace(StringBuffer str) {
              //统计出来有多少个空格
            int n = 0;
            for (int i = 0; i <str.length() ; i++) {
                if(str.charAt(i)==' ')
                    n++;
            }

            //设置新的字符串的长度
            int new_len = str.length()+(n*2); //计算出来新的字符串的长度

            int old_end = str.length()-1; //旧字符串索引最后一个有效位置
            int new_end = new_len-1; //新字符串索引最后一个有效位置

            str.setLength(new_len);//设置字符串新的长度大小,防止越界

            while (old_end>=0 && new_end>=0){

                //如果当前位置是空格
                if(str.charAt(old_end)==' '){
                    //就从当前空格的位置往后移动进行替换
                    str.setCharAt(new_end--,'0');
                    str.setCharAt(new_end--,'2');
                    str.setCharAt(new_end--,'%');

                    --old_end;
                }else {

                    //当前位置不是空格,就平移

                    str.setCharAt(new_end--,str.charAt(old_end--));
                }
            }




        return str.toString();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解题1,不考虑时间空间复杂度,暴力解题
  • 解题2
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档