剑指offer problem 4:替换空格(java)

/**
 * 请实现一个函数,将字符串的每个空格替换为"%20"。
 * 例如输入"We are happy",则输出"We%20are%20happy."。
 * 要求在原有字符串上进行修改。
 *
 * 测试用例
 * 1.字符串中无空格
 *.2.字符串中含有空格(连续空格,空格在首尾等)
 *.3.字符串为空字符串或者为null
 *
 * 要求时间复杂度为O(n)
 */
public class ReplaceBank {

    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("we are happy.");
        System.out.println(replaceBank(str));
    }

    private static String replaceBank(StringBuffer str){
        if (str == null) {
            System.out.println("输入错误!");
            return null;
        }
        int length = str.length();
        //使用双指针,两个指针重叠时复制结束
        int indexOfOriginal = length - 1;//字符串原始长度的末尾指针
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ')
                length += 2;
        }
        str.setLength(length);
        int indexOfNew = length-1;//字符串新长度的末尾指针
        while (indexOfNew > indexOfOriginal){
            if (str.charAt(indexOfOriginal) != ' '){
                str.setCharAt(indexOfNew--,str.charAt(indexOfOriginal));
            }else {
                str.setCharAt(indexOfNew--,'0');
                str.setCharAt(indexOfNew--,'2');
                str.setCharAt(indexOfNew--,'%');
            }
            indexOfOriginal--;
        }
        return str.toString();
    }
}

result:

we%20are%20happy.

你可能感兴趣的:(剑指offer problem 4:替换空格(java))