算法系列——替换空格(剑指offer)
来源:互联网 发布:淘宝一键上传好不好 编辑:程序博客网 时间:2024/05/29 14:36
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
1.O(n)空间复杂度解法O(n)时间复杂度解法
创建一个新的字符序列,遍历原字符序列,遇到空格则在新的字符序列中加上%20,否则加上 字符本身。
2.O(1)空间复杂度 O(n)时间复杂度
在原来字符串上做操作,不申请新的空间。我们可以换下思路,
先统计出空格的个数num,那么新字符串的长度就是原来字符串长度len+num*2. 然后我们倒着遍历字符串,采用双指针法,一个指向原来字符串的末尾index1,一个指向新字符串的末尾index2。如果遇到非空格字符,那么直接将字符复制到index2处,然后index2–,如果index1指向了空格字符,那么index2出应该依次加入0,2,% 这三个字符,依次类推,直到遍历结束。
程序实现
1.O(n)空间复杂度解法O(n)时间复杂度解法
/** *O(n)时间复杂度 O(n)空间复杂度 */ public String replaceSpace1(StringBuffer str) { if(str==null) return null; StringBuffer res=new StringBuffer(); for(int i=0;i<str.length();i++){ if(str.charAt(i)==' ') res.append("%20"); else res.append(str.charAt(i)); } return res.toString(); }
2.O(1)空间复杂度 O(n)时间复杂度
/** *O(n)时间复杂度 O(1)空间复杂度 */ public String replaceSpace2(StringBuffer str) { if(str==null) return null; //统计空格总数 int num=0; for(int i=0;i<str.length();i++) if(str.charAt(i)==' ') num++; int index1=str.length()-1;//指向原始字符串末尾 int index2=str.length()+num*2-1;//新字符串末尾 //设置新长度 str.setLength(index2+1); for(int i=index1;i>=0;i--){ if(str.charAt(i)!=' ') { str.setCharAt(index2, str.charAt(i)); index2--; }else{ str.setCharAt(index2--, '0'); str.setCharAt(index2--, '2'); str.setCharAt(index2--, '%'); } } return str.toString(); }
阅读全文
0 0
- 算法系列——替换空格(剑指offer)
- 剑指offer—替换空格
- 剑指offer—替换空格
- 剑指offer系列(3)——替换空格
- 剑指offer系列-替换空格
- 剑指offer系列----替换空格
- 《剑指offer》——替换空格
- 《剑指offer》——替换空格
- 剑指offer——替换空格 C++
- 剑指Offer——替换空格
- 《剑指offer》——替换空格
- 剑指offer——字符串空格替换
- 剑指Offer——替换空格
- 替换空格——剑指offer
- 剑指offer —— 替换空格
- 剑指offer——替换空格
- 剑指offer——替换空格
- 剑指offer——空格替换
- stm32+pca9685控制舵机机械臂
- 三个触发器解决变异表错误(ORA-04091)
- MyBatis的简单使用
- Java 排序算法-归并排序
- 如何快速成为数据分析师?
- 算法系列——替换空格(剑指offer)
- 返回局部变量的指针很危险
- LintCode 159:Find Minimum in Rotated Sorted Array
- Linux--fork( )函数
- java 泛型
- .net MVC使用GetOrgChart实现树形关系结构组织架构图
- python基础
- Cisco Auditing Tool ----思科路由漏洞扫描
- myeclipse中的小红叉