剑指 Offer 05. 替换空格(点击立即答题)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”

限制:

0 <= s 的长度 <= 10000

这是一道非常简单的题,简单题有简单题的要求,就是尽可能时间快,内存使用少,有的面试就喜欢考这种,每个人都会做,但是总有一些人的做法不一样,那样更快,内存占用更少。

解题思路:

1.创建一个字符类型数组aar,在最坏的情况下,字符串s全部为空格,那么arr大小定义为s.length()* 3;

2.对字符串s进行遍历,如果是空格,arr中依次加入‘%’、‘2’、‘0’,如果不是加入s.charAt(i)

3.返回字符串(注意:是返回字符串,不是数组,要把数组变成字符串)
java代码:

class Solution {public String replaceSpace(String s) {int n = s.length();int size = 0;char[] arr = new char[n * 3];for (int i = 0 ; i < n ; i++) {char temp = s.charAt(i);if (temp == ' ') {arr[size++] = '%';arr[size++]= '2';arr[size++] = '0';}else {arr[size++] = temp;}}String newStr = new String(arr , 0 , size);return new String(newStr);}
}

这是LeetCode的官方做法,内存消耗较大,我们不要将数组arr定义为s.length()* 3,我们在99.9%的情况下是用不到这么大的内存的,我们可以定义一个count来统计空格的个数,最后将arr大小定义为s.length() + count * 2。

class Solution {public String replaceSpace(String s) {int n = s.length();int count = 0;for (int i = 0 ; i < n ; i++) {if (s.charAt(i) == ' ') {count++;}}int size = 0;char[] arr = new char[n + count * 2];for (int i = 0 ; i < n ; i++) {char temp = s.charAt(i);if (temp == ' ') {arr[size++] = '%';arr[size++]= '2';arr[size++] = '0';}else {arr[size++] = temp;}}return new String(arr);}
}

即使这样内存使用还是很大,我们在这里继续进阶一下,在java中有一个类叫做StringBuilder,他对于拼接字符串具有很快的速度。

java代码:

class Solution {public String replaceSpace(String s) {int n = s.length();StringBuilder sb = new StringBuilder();for (int i = 0 ; i < n ;i++) {if(s.charAt(i) == ' ') {sb.append("%20");}else{sb.append(s.charAt(i));}}return sb.toString();}
}

在这里说明一下,LeetCode每次提交他给的内存消耗可能不一样,这可能是网速的问题。

若有误,请指教!

剑指 Offer 05. 替换空格 三种方法相关推荐

  1. 剑指 Offer 05. 替换空格(两种做法)

    一:题目 二:上码 1:方法一 class Solution {public:string replaceSpace(string s) {string str = "";for( ...

  2. 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符

    一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...

  3. 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串

    LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...

  4. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

    一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...

  5. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java

    <LeetCode力扣练习>剑指 Offer 05. 替换空格 Java 一.资源 题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输 ...

  6. 剑指 Offer 05. 替换空格 简单

    剑指 Offer 05. 替换空格 问题: 思路: 1. 方法(一):使用额外空间 2. 在原空间上扩展,利用双指针. 问题: 请实现一个函数,把字符串 s 中的每个空格替换成"%20&qu ...

  7. 力扣-图解算法数据结构-剑指 Offer 05. 替换空格

    题目要求 力扣题解 代码 /*** @program: mydemo* @description: 剑指 Offer 05. 替换空格* @author: Mr.zeng* @create: 2021 ...

  8. 剑指 Offer 05. 替换空格(完整代码)

    文章目录 剑指 Offer 05. 替换空格 1. 核心代码 2. 完整代码 总结 剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". ...

  9. 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词

    剑指 Offer 58 - II. 左旋转字符串 把前k个字符移动到结尾 翻转前k个字符,翻转剩余字符 翻转整个字符串 class Solution { public:void reverse(str ...

最新文章

  1. 硬盘序列号怎么查_ITX存储空间不足?外接一个硬盘好了WD Elements 12T开箱简测
  2. R - 0 or 1 HDU - 4370
  3. Python中的基本函数及其常用用法简析
  4. 医疗影像技术简介(X射线,CT,MRI等)
  5. android contentresolver 批量,Android之使用ContentResolver对通信录中的数据进行简单操作...
  6. C#中英文字符串固定长度换行
  7. 利用sklearn实现adaboost,以单一分类树为例
  8. 关于EmmyLua插件创建Lua脚本Require失败的问题
  9. C/C++编程学习 - 第5周 ③ 圆锥体的体积
  10. word背景颜色怎么设置绿色?把word背景调成绿色
  11. 光纤跳线接口_综合布线与弱电工程:跳线、尾纤、光纤接口,一文讲明白
  12. 四旋翼无人机建模与实现(一)
  13. 《左耳听风-高效学习篇》阅读笔记
  14. “font/woff“ and “font/woff2“ in file “mime.types“
  15. 威纶通与三菱PLC条码枪解码程序
  16. Win10:解决安装第三方杀毒软件(金山毒霸、腾讯管家、360等)导致安全中心一片空白,只显示安全性概览
  17. 问题 A: 沙子的质量
  18. 如何高效学习?一年学完麻省理工4年计算机课程
  19. 怎样让谷歌浏览器切换兼容模式打开网页
  20. rs232发送数据程序c语言,RS-232C详解.pdf

热门文章

  1. junit测试简单代码
  2. 国密算法SM2 密钥对的生成
  3. WEB基本表单及代码(HTML)
  4. PHp勾股定理,【中考备考】有关数学必考奥数题之勾股定理练习题 初二数学
  5. Linux系统的应用
  6. python3爬取微博评论api情感分析_如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析...
  7. 毕业设计 基于深度学习的人脸性别年龄识别 - 图像识别 opencv
  8. 若 PPP 协议使用同步传输技术,接收端收到的数据段中出现比特串“01011111001111101”,则真正的数据应该是()
  9. Markdown入门总结
  10. mysql 多表查询练习题(一)数据准备