《剑指offer》面试题4 替换空格 Java版

(给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成’%’ ‘2’ ‘0’三个字符,原字符段由’\0’结尾)

书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动。如果不移动元素,从头到尾处理似乎没有什么思路。看到题目给的足够长的数组,我们要联想到从后往前处理的方式。我们计算出替换后数组的长度,可以简单的推断出原字符段处理到第一个字符的时候,新字符段也处理到第一个字符。

    public void replace(char[] c){
        if(c == null || c.length == 0)return;

        int originTail = -1;
        int newTail = -1;

        int i = 0;
        while(c[i] != '\0'){
            originTail++;
            if(c[i] == ' '){
                newTail += 3;
            }else{
                newTail ++;
            }
            i++;
        }
        c[newTail+1] = '\0';
        while(originTail >= 0){
            if(c[originTail] != ' '){
                c[newTail] = c[originTail];
                newTail--;
            }else{
                c[newTail--] = '0';
                c[newTail--] = '2';
                c[newTail--] = '%';
            }
            originTail--;
        }
    }

posted @ 2019-09-26 11:05  CrazyJack  阅读(115)  评论(0编辑  收藏  举报