每日一题 为了工作 2020 0413 第四十二题

/**
 * 问题:字符串的调整与替换
 *      给定一个字符类型的数组chas[], chas 右半区全是空字符, 左半区不含有空字符。现
 * 在想将左半区中所有的空格字符替换成"%20", 假设chas右半区足够大,可以满足替换所需要
 * 的空间, 请完成替换函数。
 * 【举例】
 * 如果把chas的左半区看作字符串, 为"a b c", 假设chas的右半区足够大。替换后,
 * chas的左半区为'a%20b%20%20c"。
 * 【要求】
 * 替换函数的时间复杂度为O(N),额外空间复杂度为O(1)。
 * 【解答】
 * 遍历一遍可以得到两个信息,chas的左半区有多大,记为len, 左半区的空格数有多少,记为
 * num, 那么可知空格字符被"%20"替代后, 长度将是len+2*num。接下来从左半区的最后一个字
 * 符开始倒着遍历, 同时将字符复制到新长度最后的位置, 并依次向左倒着复制。遇到空格字
 * 符就依次把"O"、"2"和"%"进行复制。这样就可以得到替换后的chas数组。
 *
 * @author 雪瞳
 */

  

public class Replace {

    public static char[] replace(char chas[]){

        if (chas == null || chas.length==0){
            return null;
        }
        //空格数量
        int num = 0;
        //chas左半区长度
        int len = 0;

        for (len = 0;len<chas.length && chas[len]!=0;len++){
            if(chas[len]==' '){
                num++;
            }
        }

        int j = len+2*num-1;
        char result[] = new char[j+1];
        for(int i=len-1;i>-1;i--){
            if(chas[i]!=' '){
                result[j--]=chas[i];
            }else {
                result[j--]='0';
                result[j--]='2';
                result[j--]='%';
            }
        }
       return result;
    }

}
class Test{
    public static void main(String[] args) {
        char chas[]= new char[]{'a',' ','b',' ',' ','c'};
        char[] replace = Replace.replace(chas);
        for (char res:replace){
            System.err.print(res);
        }
    }
}

  

posted @ 2020-04-13 12:56  雪瞳  阅读(412)  评论(0编辑  收藏  举报