剑指offer-2-替换空格
替换空格
http://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
思路及其优缺点
- 开辟String类或者Stringbuild,直接添加; 缺点在于增加了空间复杂度,优点思路简单,编程简单
- 直接在StringBuffer上修改,StringBuffer(StringBuild)本质上是一个数组,首先扩充数组,从后往前把字符复制到后面。但是需要统计空格数,所以需要遍历两次数组,时间复杂度换来了空间复杂度。另外一个缺点编程代码更长,考虑更多
代码
开辟新数组
public class Solution { public String replaceSpace(StringBuffer str) { String res=""; for(int i=0;i<str.length();i++){ if(str.charAt(i)==' '){ res+="%20"; }else{ res+=str.charAt(i); } } return res; } }
直接替换
public class Solution { public static String replaceSpace(StringBuffer str){ // 保存当前长度,计算扩充后的长度 int len = 0, tempLen = str.length(); for(int i = 0; i < str.length(); i++){ if(str.charAt(i) == ' '){ len += 3; }else{ len += 1; } } //扩充数组 str.setLength(len); len--; //数组下标从0开始,最后一个元素是len-1 // System.out.println(len); // System.out.println(tempLen); // 移动元素,从后往前把字符复制到后面, // 这里还可以优化,即复制完第一个空格就可以终止循环了 for(int i = tempLen-1; i >= 0; i--){ if(str.charAt(i) == ' '){ str.setCharAt(len, '0'); len--; str.setCharAt(len, '2'); len--; str.setCharAt(len, '%'); len--; }else{ str.setCharAt(len, str.charAt(i)); len--; } } return str.toString(); } }
剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构