题目:

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

知识点:

  1. 字符串是不可迭代的,若想迭代字符串,可以转成字节;判断字符串中有几个' ':str.charAt(i)==‘ ’
  2. 设置stringBuffer中某位的值,str.setCharAt(index, '0')

注意:

  1. 写代码之前,先将输入的范围固定
  2. 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.替换空格相关推荐

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

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

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

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

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

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

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

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

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

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

  6. ~4.1 剑指 Offer 05. 替换空格

    剑指 Offer 05. 替换空格 题目描述 思路 源代码 题目描述 思路 C++: 在 C++ 语言中, string 被设计成「可变」的类型,因此可以在不新建字符串的情况下实现原地修改. 思路: ...

  7. Suzy找到实习了吗Day 8 | 字符串开始啦 344. 反转字符串,541. 反转字符串 II,剑指 Offer 05. 替换空格,151. 反转字符串中的单词,左旋转字符串

    这里是目录 344. 反转字符串 题目 Solution 541. 反转字符串 II 题目 Solution(v1) Solution(v2) 剑指 Offer 05. 替换空格 做题记录 151. ...

  8. 剑指 Offer 05. 替换空格 三种方法

    剑指 Offer 05. 替换空格(点击立即答题) 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy.& ...

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

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

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

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

最新文章

  1. PowerShell 学习笔记——运行命令
  2. tomcat的jsp页面超过65535,导致500报错
  3. HDU - 4280 Island Transport(最大流)
  4. Python中的判断语句及循环
  5. D-query SPOJ - DQUERY (莫队算法裸题)
  6. ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
  7. 树莓派 python spi,树莓派测试SPI-基于设备操作ioctl
  8. 前端_JavaScript
  9. Cisco Packet Tracer7.1 rip协议实验
  10. 奇安信代码卫士帮助微软和 Oracle 修复多个高危漏洞,获官方致谢
  11. P3369 普通平衡树模板 treap
  12. 浅谈网游服务器的承载
  13. oracle11g dataguard安装实施
  14. iphonex 序列号_iPhoneX序列号在哪 苹果X序列号怎么看?
  15. 前端搜索引擎优化SEO优化之Title 和 Meta 标签
  16. 抖音聊天”上线,字节最后的社交梦?
  17. c 语言单片机开发,单片机C语言开发离不开它
  18. 响应式织梦模板SEO优化教程资讯类网站
  19. 常用流媒体协议(HLS/HTTP/RTP组播/RTSP)提取流的方法
  20. 代码高处走 从VC6到VC9移植代码问题说明

热门文章

  1. CentOS6.5安装telnet命令
  2. 环形数组求最大子数组之和
  3. linux查看进程和终止进程
  4. 一段.net 发邮件的代码
  5. 物流系统开发中,Dev倥件的使用
  6. 【Java数据结构】链式存储的二叉树
  7. ❤️20行Python代码❤️一键整理桌面、文件夹❤️世界都清净了❤️
  8. mysq命令行导出sql_mysql利用命令导出数据sql语句
  9. vue 数组添加元素_Vue躬行记(3)——样式和表单
  10. 简单的python案例_实现的简单python例子