首页 > 其他分享 >牛客网-替换空格

牛客网-替换空格

时间:2024-04-06 23:31:31浏览次数:22  
标签:count old 空格 牛客 str 字符串 new 替换

目录

问题描述

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

题目链接: https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423

示例

示例1
输入:w e a r e l u c k y
返回值:w e % 2 0 a r e % 2 0 l u c k y

示例2
输入:We Are Happy
返回值:We%20Are%20Happy

具体思路

思路一

虽然是替换问题,到那时生成的字符串整体变长了
因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题
移动方向一定是向后移动,所以现在的问题无非是移动多少的问题
因为是‘ ’ ->“%20”,是1换3,所以可以先统计原字符串中空格的个数(设为count),然后可以计算出新字符串的长度
所以:new_str=old_str+2*count
最后,定义新老索引(或者指针),各自指向新老空间的结尾,然后进行old->new的移动
如果是空格,就连续放入“%20”,其他平移即可
当然,C++和Java都有很多容器,也可以从前往后通过开辟空间来进行解决。也就是使用空间来换取时间
但是,我们最好不要在当前场景下这么做

  替换空格大致可分为以下三个步骤:
(1)遍历一遍字符串,统计字符串当中的空格数count。
(2)通过空格数count算出替换后字符串的新长度new_str
   因为一个空格字符会被替换为三个字符,所以替换后字符串的新长度new_str=length+2*count
(3)从后向前对字符串进行填充
   计算出替换后的字符串的长度后,我们可以在原字符串当中,从后往前进行填充。若遇到的不是空格,则将遍历到的字符从后往前进行填充。

在这里插入图片描述
  若遇到的是空格,则从后往前填充字符‘0’,‘2’,‘%’
  如此进行下去,直到字符串遍历完毕即可得到替换后的字符串。

代码实现


class Solution {
public:
    void replaceSpace(char *str,int length) {
        int count=0;
        char *start=str;
        while(*start)
        {
            //if(*start==' ')
            if(isspace(*start))
            {
                count++;
            }
            start++;
        }

        char* old_str=str+length;
        char* new_str=str+length+2*count;
        while(old_str>=str&&new_str>=str)
        {
            //if((*old_str)!=' ')
            if(!isspace(*old_str))
            {
                *new_str=*old_str;
                new_str--;
                old_str--;
            }
            else
            {
                *new_str--='0';
                *new_str--='2';
                *new_str--='%';
                old_str--;
            }
        }
    }
};

标签:count,old,空格,牛客,str,字符串,new,替换
From: https://blog.csdn.net/m0_70091181/article/details/137441051

相关文章

  • 牛客面经(2024-04-07)
    美团一面4.2 基本全程八股1.双亲委派,类加载,每种类加载器加载什么?双亲委派:启动类加载器、拓展类、应用程序..打破双亲委派机制类加载过程:加载、链接(验证准备解析)、初始化、使用、卸载 2.spring AOP,bean 基于动态代理实现,jdk代理和cglibjdk代理因为是要继承pr......
  • 告别复制粘贴,文件夹名称一键替换
    在数字化发展全面的现代,我们经常使用那些形形色色的电子设备和程序进行文件的管理。然而,在日常使用中,我们常常陷入一种重复劳动的困境——复制粘贴。每当需要修改大量相似文件的名称时,这种重复的操作无疑让人疲惫。好在,现在有了一键替换文件夹名称的方法,它如同神一般降临,让我们......
  • 牛客小白月赛90----->D.小A的线段(easy version)
    1,思路:因为只有10个线段所以直接暴力枚举所有方案,看满足条件的方案有多少个,我这里用的是二进制枚举(dfs也可以),时间复杂度是:1024*1e5=1e8,这个时间复杂度是可以接受的。2.代码:#include<iostream>#include<algorithm>#include<cmath>#include<cstring>usingnamespacestd;......
  • 牛客小白月赛90题解
    A.小A的文化节#include<bits/stdc++.h>#defineintlonglong#defineendl"\n"usingnamespacestd;constintN=1e5+10,mod=1e9+7;intn,m,a[N];voidsolve(){ cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];intres=0......
  • 牛客小白月赛90 A~D
    A-小A的文化节(Nowcoder78306A)题目大意将n个数中选定的数相加并输出。解题思路数据量很小只需int即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullpt......
  • 牛客 HJ5进制转换
    暴力匹配求解:java字符与整型之间的转换:char-'0'与(char)int,字符串与整型转换:String.valueOf(int)与Integer.parseInt(str)importjava.util.Scanner;//注意类名必须为Main,不要有任何packagexxx信息publicclassMain{publicstaticvoidmain(String[]args)......
  • 艾科瑞特科技:计算机视觉-图像示例替换
    艾科瑞特科技:计算机视觉-图像示例替换关键词:目标检测、目标跟踪、图像识别、图像分类、视频分析、自然语言处理、自然语言分析、计算机视觉、人工智能、AIGC、AI、大模型、多模态大模型、API、Docker、镜像、API市场、云市场、国产软件、信创内容摘要:图像示例替换技术利用先......
  • ctfshow--web7 sql注入空格过滤
    ?id=10//union//select//1,database(),3//%23查看库名查看表名-1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()),3/**/%23查看flag表下的flag字段-1/**/union/**/select/**/1,(......
  • ctfshow--web6 sql注入空格绕过
    这道题目空格被过滤了,那么我们可以用/**/来替换空格'union/**/select/**/1,(select/**/database()),3#//查看数据库名名字为web2查看web2下的表名'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schem......
  • 将字符串中的所有空格替换为“%20”
    算法:将字符串中的所有空格替换为“%20”解决思路:首先使用StringBuilder对象,之后用For循环遍历并判断字符,最后将StringBuilder对象转换为String对象。代码示例:publicStringreplaceSpaces(StringS,intlength){StringBuildersb=newStringBuilder();......