剑指 Offer 05. 替换空格 三种方法
剑指 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. 替换空格 三种方法相关推荐
- 剑指 Offer 05. 替换空格(两种做法)
一:题目 二:上码 1:方法一 class Solution {public:string replaceSpace(string s) {string str = "";for( ...
- 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符
一.344.反转字符串 力扣 思路:很简单的一个for循环双指针,left和right交换. class Solution {public void reverseString(char[] s) { ...
- 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...
- 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串
一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...
- 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java
<LeetCode力扣练习>剑指 Offer 05. 替换空格 Java 一.资源 题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输 ...
- 剑指 Offer 05. 替换空格 简单
剑指 Offer 05. 替换空格 问题: 思路: 1. 方法(一):使用额外空间 2. 在原空间上扩展,利用双指针. 问题: 请实现一个函数,把字符串 s 中的每个空格替换成"%20&qu ...
- 力扣-图解算法数据结构-剑指 Offer 05. 替换空格
题目要求 力扣题解 代码 /*** @program: mydemo* @description: 剑指 Offer 05. 替换空格* @author: Mr.zeng* @create: 2021 ...
- 剑指 Offer 05. 替换空格(完整代码)
文章目录 剑指 Offer 05. 替换空格 1. 核心代码 2. 完整代码 总结 剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". ...
- 字符串(一) | 剑指 Offer 58 - II. 左旋转字符串、541. 反转字符串 II、剑指 Offer 05. 替换空格、151. 反转字符串中的单词
剑指 Offer 58 - II. 左旋转字符串 把前k个字符移动到结尾 翻转前k个字符,翻转剩余字符 翻转整个字符串 class Solution { public:void reverse(str ...
最新文章
- 硬盘序列号怎么查_ITX存储空间不足?外接一个硬盘好了WD Elements 12T开箱简测
- R - 0 or 1 HDU - 4370
- Python中的基本函数及其常用用法简析
- 医疗影像技术简介(X射线,CT,MRI等)
- android contentresolver 批量,Android之使用ContentResolver对通信录中的数据进行简单操作...
- C#中英文字符串固定长度换行
- 利用sklearn实现adaboost,以单一分类树为例
- 关于EmmyLua插件创建Lua脚本Require失败的问题
- C/C++编程学习 - 第5周 ③ 圆锥体的体积
- word背景颜色怎么设置绿色?把word背景调成绿色
- 光纤跳线接口_综合布线与弱电工程:跳线、尾纤、光纤接口,一文讲明白
- 四旋翼无人机建模与实现(一)
- 《左耳听风-高效学习篇》阅读笔记
- “font/woff“ and “font/woff2“ in file “mime.types“
- 威纶通与三菱PLC条码枪解码程序
- Win10:解决安装第三方杀毒软件(金山毒霸、腾讯管家、360等)导致安全中心一片空白,只显示安全性概览
- 问题 A: 沙子的质量
- 如何高效学习?一年学完麻省理工4年计算机课程
- 怎样让谷歌浏览器切换兼容模式打开网页
- rs232发送数据程序c语言,RS-232C详解.pdf
热门文章
- junit测试简单代码
- 国密算法SM2 密钥对的生成
- WEB基本表单及代码(HTML)
- PHp勾股定理,【中考备考】有关数学必考奥数题之勾股定理练习题 初二数学
- Linux系统的应用
- python3爬取微博评论api情感分析_如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析...
- 毕业设计 基于深度学习的人脸性别年龄识别 - 图像识别 opencv
- 若 PPP 协议使用同步传输技术,接收端收到的数据段中出现比特串“01011111001111101”,则真正的数据应该是()
- Markdown入门总结
- mysql 多表查询练习题(一)数据准备