剑指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题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务