剑指offer——5.替换空格
题目:
题1:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
知识点:
- 字符串是不可迭代的,若想迭代字符串,可以转成字节;判断字符串中有几个' ':str.charAt(i)==‘ ’
- 设置stringBuffer中某位的值,str.setCharAt(index, '0')
注意:
- 写代码之前,先将输入的范围固定
- java中字符串用‘ ’
代码实现(java):
题1:
- 从左往右替换时间复杂度O(n²)
- 从右往左替换时间复杂度O(n):先计算字符串中有多少空格,确定替换后字符串的长度(原p1,现p2);接下来将原位置的字符串依次替换至新位置。
private static String change(StringBuffer str) {if(str==null){return null;}//定位p1、p2的位置,依次左移赋值int count = 0;for(int i=0; i<str.length(); i++) {if(str.charAt(i)==' ') {count++;}}int p1 = str.length()-1;str.setLength(str.length() + 2*count);int p2 = str.length()-1;while(p2>=p1&&p1>=0) {if(str.charAt(p1)==' ') {str.setCharAt(p2, '0');str.setCharAt(p2-1, '2');str.setCharAt(p2-2, '%');p2-=3;p1--;}else {str.setCharAt(p2, str.charAt(p1));p2--;p1--;}}return str.toString();}
题2:有两个有序的数组A1和A2,A1末尾有足够空间容纳A2。实现一个函数将A2的所有数字插入到A1中,并且所有数字是有序的。
private static int[] merge(int[] A1, int[] A2) {if(A1==null) {return null;}int count = 0;for(int i:A1) {if(i!= 0) {count++;}}int A1Index = count-1;int A2Index = A2.length-1;int allIndex = count + A2.length -1;while(allIndex>=0) {if(A1Index <0) {A1[allIndex--] = A2[A2Index--];}else if(A2Index <0) {A1[allIndex--] = A1[A1Index--];}else if(A1[A1Index]>=A2[A2Index]){A1[allIndex--] = A1[A1Index--];}else {A1[allIndex--] = A2[A2Index--];}}return A1;
}
思考:是不是所有的替换和插入,从时间空间复杂度来说,都最好从后往前插更好呢
代码实现(C++):
void replaceSpace(char *str, int length) {if (str == NULL && length <= 0)return;/*strLength表示str的实际长度、numberOfBlank*/int strLength = 0;int numberOfBlank = 0;for (int i = 0; str[i] != '\0'; i++) // '\0'代表空字符{ ++strLength;if(str[i]==' ')++numberOfBlank;}/*str的新长度*/int newStrLength = strLength + numberOfBlank*2;/*定义两个指针*/int indexOfOld = strLength;int indexOfNew = newStrLength;/*依次从右往左遍历*//*当indexOfOld至0或者indexOfOld=indexOfNew,退出*/while (indexOfOld >= 0 && indexOfNew > indexOfOld){ /*indexOfOld找到' ',对应indexOfNew替换*/if (str[indexOfOld] == ' '){str[indexOfNew--] = '0';str[indexOfNew--] = '2';str[indexOfNew--] = '%';}else {str[indexOfNew--] = str[indexOfOld];}--indexOfOld;}
}int main()
{const int length = 100;char str[length] = " helloworld";cout << str << endl;replaceSpace(str, length);cout << str << endl;getchar();return 0;
}
剑指offer——5.替换空格相关推荐
- 《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 ...
- ~4.1 剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格 题目描述 思路 源代码 题目描述 思路 C++: 在 C++ 语言中, string 被设计成「可变」的类型,因此可以在不新建字符串的情况下实现原地修改. 思路: ...
- Suzy找到实习了吗Day 8 | 字符串开始啦 344. 反转字符串,541. 反转字符串 II,剑指 Offer 05. 替换空格,151. 反转字符串中的单词,左旋转字符串
这里是目录 344. 反转字符串 题目 Solution 541. 反转字符串 II 题目 Solution(v1) Solution(v2) 剑指 Offer 05. 替换空格 做题记录 151. ...
- 剑指 Offer 05. 替换空格 三种方法
剑指 Offer 05. 替换空格(点击立即答题) 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy.& ...
- 代码随想录算法训练营第八天|● 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 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...
最新文章
- PowerShell 学习笔记——运行命令
- tomcat的jsp页面超过65535,导致500报错
- HDU - 4280 Island Transport(最大流)
- Python中的判断语句及循环
- D-query SPOJ - DQUERY (莫队算法裸题)
- ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
- 树莓派 python spi,树莓派测试SPI-基于设备操作ioctl
- 前端_JavaScript
- Cisco Packet Tracer7.1 rip协议实验
- 奇安信代码卫士帮助微软和 Oracle 修复多个高危漏洞,获官方致谢
- P3369 普通平衡树模板 treap
- 浅谈网游服务器的承载
- oracle11g dataguard安装实施
- iphonex 序列号_iPhoneX序列号在哪 苹果X序列号怎么看?
- 前端搜索引擎优化SEO优化之Title 和 Meta 标签
- 抖音聊天”上线,字节最后的社交梦?
- c 语言单片机开发,单片机C语言开发离不开它
- 响应式织梦模板SEO优化教程资讯类网站
- 常用流媒体协议(HLS/HTTP/RTP组播/RTSP)提取流的方法
- 代码高处走 从VC6到VC9移植代码问题说明