题解 | #替换空格#

替换空格

http://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68

题解一:暴力(原字符串上修改)
题解思路:从头开始遍历数组,当遇到空格,先将后续字符往后移2个位置,再在空格位置以及后两个位置填上"%20"这三个字符

示例:
图片说明
复杂度分析
时间复杂度:,暴力的两次循环,第一层循环找空格位置,第二层循环将空格后面的字符往后移2位置
空间复杂度:,只使用常数个临时变量存放中间值

实现如下:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string replaceSpace(string s) {
        // write code here
        int result=0;
        for(auto i:s){
            if(i==' ')++result;
        }
        int l=s.size();
        s.resize(l+result*2);
        for(int i=0;i<s.size();){
            if(s[i]==' '){//字符为空格
                for(int j=s.size()-1;j>i+2;j--){//i字符之后字符整体后移2个位置
                    s[j]=s[j-2];
                }
                s[i]='%';//填充为%20
                s[i+1]='2';
                s[i+2]='0';
            }else{
                i++;
            }
        }
        return s;
    }
};

题解二:遍历字符串,拼接(利用一个新字符串)
题解思路: 从头开始遍历字符串,当遇到空格,则s1 +="%20",否则s1+=s[i];
示例:
图片说明
复杂度分析
时间复杂度:,遍历了一次字符串,找其中的空格数
空间复杂度:,使用了一个s1的字符串保存修改后的结果

实现如下:

class Solution {
public:
    string replaceSpace(string s) {
        // write code here
        string s1="";
        for(int i = 0;i<s.length();i++)
        {
            if(s[i]!=' ') s1+= s[i];
            else s1+="%20";
        }
        return s1;

    }
};

题解二:原地修改(双指针)
题解思路:
1.统计字符串中空格的个数num,接着在原字符串尾增加长度size=num*2.
2.使用 i 指向扩展前字符串尾部字符,j 指向扩展之后的字符串末尾位置。
3、开始遍历字符串
a.当s[i]为空格,在s[j]='0',s[j-1]='2',s[j-2]='%';
b.当s[i]为字符,s[j]=s[i];
示例:
图片说明

复杂度分析:
时间复杂度:,遍历一次字符串,找其中的空格位置
空间复杂度:,只使用常数个临时变量存放中间值

class Solution {public:    string replaceSpace(string s) {
        int num = 0,length = s.length();
      for(auto i : s)
      {
          if(i==' ') num++;//统计空格数
      }
      s.resize(length + 2*num);//拓展长度
      for(int i = length-1,j = s.size()-1; j>i;j--,i--)
      {
          if(s[i]!=' ') s[j] = s[i];//当s[i]为字符,s[j]=s[i];
          else//为空格,补上%20;
          {
              s[j] = '0';
              s[j-1] = '2';
              s[j-2] = '%';
              j-=2;
          }
      }
      return s;
      }
};
牛客网编程题题解 文章被收录于专栏

本专栏记录在牛客网上AC的每一题,写下题解。 未来2年完成2000编程题的题解。 2021.12.29更新,最进准备毕设,断更了,会尽快做完毕设,继续做这一件事情

全部评论

相关推荐

点赞 评论 收藏
分享
10-10 16:30
济宁学院 Java
一表renzha:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
评论
19
5
分享

创作者周榜

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