剑指offer——面试题4:替换空格

剑指offer——替换空格 经典面试题——替换空格 阅读详情

力扣,https://leetcode.cn/problems/ti-huan-kong-ge-lcof/description/

Python

class Solution:
    def pathEncryption(self, path: str) -> str:
        return path.replace('.', ' ')

Java

class Solution {
    public String pathEncryption(String path) {
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < path.length(); ++i) {
            if (path.charAt(i) == '.') {
                sBuilder.append(' ');
            } else {
                sBuilder.append(path.charAt(i));
            }
        }

        return sBuilder.toString();
    }
}

此题的关键思路在于字符串的从后向前复制!!!

class Solution {
public:
	void replaceSpace(char *str,int length) {//length是数组的容量
        if(str == NULL || length<0) return;//排除异常情况
        int m=strlen(str),num_blank=0;
        for(int i=0;str[i]!='\0';i++)
            if(str[i]==' ')
                num_blank++;
        int n=m+2*num_blank;
        if(n+1>length) return;
        int i=m,j=n;//字符串的结束符'\0'也需要手动复制
        while(i>=0 && j>i){
            if(str[i]==' '){
                str[j--]='0';
                str[j--]='2';
                str[j--]='%';
            }
            else{
                str[j--]=str[i];
            }
            i--;
        }
	}
};

反思一下自己:每天就跟傻逼一样活着
20190901日重做
C版

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if (str == NULL || length == 0) {
            return;
        }
        int strLen = strlen(str), blankCount = 0;
        for (int i = 0; i < strLen; i++) {
            if (str[i] == ' ') {
                blankCount++;
            }
        }
        int newStrLen = strLen + 2 * blankCount;
        if (newStrLen > length) {
            return;
        }
        int i = strLen, j = newStrLen;
        while (i >= 0 && j > i) {
            if (str[i] != ' ') {
                str[j--] = str[i--];
            } else {
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
                i--;
            }
        }
        return;
	}
};

有两点需要注意:

  1. C风格的字符串是以’\0’结尾的,这个必须手动复制;
  2. 当后指针的位置追上前指针的位置时,证明原字符串中所有的空格已经被填满了,再往前就没有空格了,也就不必再逐个字符复制了。
    Java版答案1:
    利用自带的replace函数,确实省劲啊~~~
public class Solution {
    public String replaceSpace(StringBuffer str) {
        int index = -1;
        while ((index = str.indexOf(" ")) != -1) {
            str = str.replace(index, index + 1, "%20");
        }
        return str.toString();
    }
}

Java版答案2:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int spacenum = 0;//spacenum为计算空格数
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' ')
                spacenum++;
        }
        int indexold = str.length()-1; //indexold为为替换前的str下标
        int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度
        int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标
        str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界
        for(;indexold>=0 && indexold<newlength;--indexold){ 
                if(str.charAt(indexold) == ' '){  //
                str.setCharAt(indexnew--, '0');
                str.setCharAt(indexnew--, '2');
                str.setCharAt(indexnew--, '%');
                }else{
                    str.setCharAt(indexnew--, str.charAt(indexold));
                }
        }
        return str.toString();
    }
}

重点要熟悉StringBuffer的一些函数使用方法!!!

C++版 - 剑指offer 面试题4: 替换空格 题解 面试题4:替换空格 参与人数:10327 时间限制:1秒 空间限制:32768K 本题知识点:字符串 题目描述 请实现一个函数void replaceSpace(char *str,int length),将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 分析: 阅读详情

相关推荐

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4961

剑指offer系列——剑指 Offer 05. 替换空格(C/C++/Java)

⭐️前面的话⭐️ 大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如有错误,欢迎指正,如果有更好的解题思路和算法可以分享给博主哦!一起加油!一起努力! 剑指 Offer 05. 替换空格

未见花闻的博客 1898

超声波雾化驱动设计:专用芯片FM8118替代MCU的工程实践

超声波雾化是一种基于压电陶瓷谐振原理的高频能量转换技术,其核心在于在1.6–2.4MHz频段精准激励雾化片以实现高效水分子破碎。传统采用通用MCU配合分立MOSFET的方案受限于PWM频率上限、栅极驱动能力不足及EMI控制困难,导致雾化效率低、温升高、可靠性差。专用雾化芯片(如FM8118)通过集成2.1MHz振荡器、零电压开关(ZVS)控制与过流/过热双重保护,从架构层面解决高频功率驱动的本质约束,显著提升驱动效率(达83.7%)与系统鲁棒性。该技术广泛适用于桌面加湿器、医疗雾化器、农业微喷等对体积、功耗

weixin_34620658的博客 404

leetcode剑指 Offer 05. 替换空格(两种方法)

最后得到的字符缓冲区的大小就是要扩容的大小,我们直接将字符缓冲区转为字符串,再拼接到s的末尾。最后我们使用一个双指针法来替换元素,左指针指向原字符串的最后一位,右指针指向新字符串的最后一位,两个指针同时向低位移动,如果左指针是空格,则右指针添加三个字符‘0’、‘2’、‘%’,否则只添加左指针指向的字符。第一种方法:使用一个StringBuilder字符缓冲区,将字符串s中的字符一个个取出来,如果是空格则将"%200"加入字符缓冲区,否则将当前字符加入字符缓冲区。输出:“We%20are%20happy.”

橙子的博客 379

Android:Google三方库之Adjust集成详细步骤

Android为APP添加google adjust功能

学习就是我的个性 4473

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

344.反转字符串, 541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。版权声明:本文为优快云博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。编写一个函数,其作用是将输入的字符串反转过来。反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。

渡梦酒的博客 863

【文献笔记】CVPR 2023|Attention-Based Point Cloud Edge Sampling

优点能够有效采出点云数据的边缘点分类任务性能优越不足没有设计出一个更好的上采样方法,导致分割任务的性能略低只考虑了边缘特征,没有利用其他几何特征。

m0_55908255的博客 318

剑指Offer——替换空格

Question 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 Solution 这道题目的话,因为是数组,如果从头开始遍历的话,遇到一个空格,那么后面的字符都将移动。 因此我们可以考虑先判断空格的数目,然后从后面往前面复制,遇到空格直接替换就行,不需要多余的移动数据。 Code cl...

weixin_30374009的博客 100

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4792

SAR图像去斑(Despeckling)研究的主流开源数据集

这些数据集专门用于训练监督学习去斑模型,提供了配对的含斑SAR图像和对应的无噪声参考图像(Ground Truth)。这些数据集主要用于目标检测/识别,但包含原始SAR图像,可用于。由于缺乏真实无噪声SAR图像,许多研究采用。

VectorShift的博客 128

《剑指Offer》面试题4:替换空格

《剑指Offer》 P44面试题4:替换空格题目:

(●—●) 476

企业数字化建设之——品牌零售全渠道运营中台解决方案

OMS审单 --> 订单进入OMS待发货列表区域 --> 备货(线下)-->拣货((线下 )-->质检(线下)--> 包装(线下)--> 快递员取货(线下)(物品 + 客户收货地址清单 )--> 快递员发货(2.2.5 正常退货,客户发起 --> 客服助理审核 --> 评审组 --> ( 货物运输 ) -->质检 ->仓库收货入 正常仓库 -->财务退款,记账。OMS审单 --> 订单进入物流公司系统(如:*丰),--> 快递员发货 --> 物流状态同步OMS --> OMS同步物流状态到销售平台。

java_zhong1990的专栏 612

剑指offer面试题4:替换空格

题目:替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy",则输出”We%20are%20happy 思路:思路: 看到这个问题,我们通常的思路是从前向后遍历字符串,每遇到一个空格将空格之后的字符向后移动两位,然后将将“%20”插进去,假设字符串长度为n,有n个空格,对于每个空格,需要移动后面的字符的时间复杂度为o(n),则对于n个空格时间复杂度为...

GuYuyuyuyu的博客 224

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【剑指Offer】面试题4:替换空格

一:题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy 二:解题思路 三:代码实现

曦曦慕慕的专栏 396

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【一刷《剑指Offer》】面试题 4:替换空格

因为是 ' ' -> "%20",是 1 换 3,所以可以先统计原字符串中空格的个数(设为 n),然后可以计算出新字符串的长度。C 库函数中内存拷贝 memmove() 函数与此题有共同点,函数功能就是:将起始地址 src 且长度为 count 的内存拷贝到起始地址 dst 处,并返回 dst,返回是为了实现链式表达式。合并两个数字(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

Elena's Blog 574

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《剑指offer》面试题4:替换空格

面试题4:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20",例如输入"We are happy.",则输出"we%20are%20happy"。   在网络编程中,如果URL参数中含有特殊字符,如空格、#等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在%后面跟上ASCI1码的两位十六进制的表示。比如空格的ASCI码是...

专注于C/C++/Linux领域创作 387

【剑指Offer学习】【面试题4 : 替换空格】

请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”。

https://github.com/Wang-Jun-Chao 1万+

剑指Offer面试题:4.替换空格

一、题目 请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。 二、思路 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和 P2...

小强博客 572

剑指Offer——面试题4:替换空格

书中思路: public String replaceSpace(String str1) { if (str == null) { return null; } StringBuffer str = new StringBuffer(str1); int length = s...

日有寸进 226

[剑指offer]面试题4:替换空格

面试题4:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。 ❖ 时间复杂度为O(n2)的解法,不足以拿到Offer 最直观的做法是从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换成3个字符,我们必须要把空格后面所有的字符都后移两个字节,否则就有两个字符被覆盖了。 代码如下: #include <iostream> using namespace std; //le

m0_51955470的博客 235

剑指Offer:面试题4 替换空格

/* 替换空格: 请事先一个函数,把字符串中的每个空格替换成"%20"。例如 输入: We are happy. MaChao 输出: We%20are%20happy. MaChao */ /* 关键: 1 第一次遍历字符串统计空格数,计算新的字符串长度 2 采用p1指向原来结尾,p2直线新结尾,然后不遇见空格时,依次复制,   遇见空格,p1不动,p2连减三次,每次

qingyuanluofeng的专栏 706

剑指Offer面试题4:替换空格 Java实现

题目:请实现一个函数,把字符串中的每个空格替换成“20%”。例如,输入“we are so happy”则输出:“we20%are20%so20%happy”。 算法分析: 算法1:时间复杂度为O(n^2)的解法 现在我们考虑怎么做替换操作。最直观的做法是从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换称3个字符,我们必须把空格后面的所有的字符

做一名努力的通信程序员 974

《剑指offer》【面试题4:替换空格】

面试题4:替换空格字符串:一种基本的数据结构,是由若干字符组成的序列。注意的是每个字符串都以"\0"作为结尾,这样当我们在使用字符串的时候,也可以作为一个字符串的结尾标志。但是也是因为"\0"这个字符使得稍不留心就会造成字符串的越界,这也算是字符串的一个考点,或者认为是和数组的比较吧。存储:把常量字符串放到单独的一个内存区域,当几个指针赋值给相同的常量字符串的时候,实际上这几个指针指向的是一块相同...

IT_model的博客 1947

剑指Offer之面试题4:替换空格

所有代码均通过G++编译器测试,仅为练手纪录。 //面试题4:替换空格 //题目:请实现一个函数,把字符串中的每个空格替换成“%20”. //     例如输入“We are happy.”,则输出“We%20are%20happy.” //面试题4:替换空格 //题目:请实现一个函数,把字符串中的每个空格替换成“%20”. // 例如输入“We are ha

Pillary的专栏 478
上一篇: 剑指offer——面试题3:二维数组中的查找
下一篇: 剑指offer——面试题5:从尾到头打印链表
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值