码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer(书):替换空格

时间:2018-08-04 13:05:19      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:space   空间   length   空间换时间   结果   str   pre   长度   依次   

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

分析:通常来说,这样的题有两种方式。空间换时间,时间换空间。但是这个有更好的算法。可以先计算空格的次数,然后计算最后的长度,有两个下标,分别表示原串最后的位置和结果串最后的位置,我们从后向前推,遇到空格就补充%20,同时结果串的下标依次前移,遇不到就将原串的当前下标的值给结果串下标的值,同时两者下标前移,直到原串下标移到开始位置

public class Solution05 {
    public String replaceSpace(StringBuffer str) {
        if (str == null) {
            return null;
        }
        if (str.length() == 0) {
            return str.toString();
        }
        int spaceLength = 0;
        int strLength = str.length();
        for (int i = 0; i < strLength; i++) {
            if (str.charAt(i) == ‘ ‘) {
                spaceLength++;
                str.append(‘ ‘);
                str.append(‘ ‘);
            }
        }
        int resultLength = spaceLength * 2 + strLength - 1;
        for (int i = strLength - 1; i >= 0 && spaceLength > 0; i--) {
            if (str.charAt(i) == ‘ ‘) {
                str.setCharAt(resultLength, ‘0‘);
                resultLength--;
                str.setCharAt(resultLength, ‘2‘);
                resultLength--;
                str.setCharAt(resultLength, ‘%‘);
                resultLength--;
                spaceLength--;
            } else {
                str.setCharAt(resultLength--, str.charAt(i));
            }


        }
        return str.toString();
    }

    public static void main(String[] args) {
        Solution05 solution05 = new Solution05();
        System.out.print(solution05.replaceSpace(new StringBuffer("We  Are Happy. ")));
    }
}

 

剑指Offer(书):替换空格

标签:space   空间   length   空间换时间   结果   str   pre   长度   依次   

原文地址:https://www.cnblogs.com/liter7/p/9416514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!