剑指offer 面试题4 替换空格

来源:互联网 发布:淘宝店铺店标素材 编辑:程序博客网 时间:2024/06/08 19:36

剑指offer 面试题4 替换空格

题目:
请实现一个函数,把字符串中的每个空格替换成 “%20”。
例如输入 “We are happy.”,则输出”We%20are%20happy.”。

package algorithm.foroffer;/** * Created by liyazhou on 2017/5/23. * 面试题4: 替换空格 * 题目: 请实现一个函数,把字符串中的每个空格替换成 "%20"。 *       例如输入 "We are happy.",则输出"We%20are%20happy."。 */public class Test04 {    public static String replaceSpace(String line, String oldStr, String newStr){        line = line.replace(oldStr, newStr);        return line;    }    public static String replaceSpace2(String line, String oldStr, String newStr){         String[] strs = line.split(oldStr);         return String.join(newStr, strs);    }    /**     * 思路:     *      1. 统计空格的个数,计算转换后的字符数组的长度,判断其是否小于字符数组的容量 capacity,如果为假,返回 -1     *      2. 从后往前取出原始字符数组中的字符,直到没有空格     *          如果是' ',则执行替换操作     *          如果不是' ', 则复制该字符     * @param chars 需要转换的字符数组     * @param usedLength 字符数组中元素的个数     * @return 转换后的字符数据中元素的个数,-1表示转换失败     */    public static int replaceSpace3(char[] chars, int usedLength){        // 判断输入是否合法        if(chars == null || usedLength < 1) return -1;        // 统计字符数组中空格字符的个数        int spaceCnt = 0;        for(int i = 0; i < usedLength; i++)            if (chars[i] == ' ')  ++spaceCnt;        // 计算新字符数组所需要的长度        int newUsedLength = 2 * spaceCnt + usedLength;   // int increment = 2 * spaceCnt;        if (chars.length < newUsedLength) return -1;  // 字符数组长度太小,转换失败        int indexOfOriginal = usedLength - 1;  // 指向未移动的字符串的末尾,也即是指向待移动的字符        int indexOfNew = newUsedLength - 1;   // 指向移动后的字符串的开头        // 从后往前移动字符数组的元素        // while (indexOfOriginal >= 0 && indexOfOriginal < indexOfNew){  // 当还存在空格时,继续移动字符        while (spaceCnt > 0){  // 当还存在空格时,继续移动字符            if (chars[indexOfOriginal] == ' '){  // 判断当前字符是为' ',为真则替换' '                spaceCnt--;                chars[indexOfNew--] = '0';                chars[indexOfNew--] = '2';                chars[indexOfNew--] = '%';            }else{  // 保存在字符                chars[indexOfNew--] = chars[indexOfOriginal];            }            indexOfOriginal--;  // 字符数组的指针向前移动一位        }        return newUsedLength;    }    public static void main(String[] args){        String line = "We are  happy .";        String line1= Test04.replaceSpace(line, " ", "%20");        System.out.println(line1);        String line2 = Test04.replaceSpace2(line, " ", "%20");        System.out.println(line2);        char[] chars = new char[50];        char[] string = line.toCharArray();        for (int i = 0; i < string.length; i++)            chars[i] = string[i];        int length = Test04.replaceSpace3(chars, string.length);        System.out.println(new String(chars, 0, length));    }}
原创粉丝点击