字符串替换空格

题目:实现一个函数,把字符串中的每一个空格替换为“%20”。

public class ReplaceBlack {
    public static void main(String[] args) {

        char[] result = replaceBlack("how are you!");
        if (result != null) {
            printchar(result);
        }

    }

    // 替换空格
    public static char[] replaceBlack(String originstr) {
        char[] testchar;
        if (originstr.length() > 00 && originstr != null) {
            int oldlength = originstr.length();
            int newlength = getBlackCount(originstr) * 2 + oldlength;//一个字符串变成了3个多了2个
            testchar = new char[newlength];
            int indexOfold = oldlength - 1;
            int indexOfnew = newlength - 1;
            System.arraycopy(originstr.toCharArray(), 0, testchar, 0,
                    originstr.toCharArray().length);
            System.err.println("未替换空格时的字符串");
            printchar(testchar);
            System.err.println("替换空格后的字符串");
            while (indexOfold >= 0 && indexOfold != indexOfnew) {
                if (testchar[indexOfold] == ' ') {
                    testchar[indexOfnew--] = '0';
                    testchar[indexOfnew--] = '2';
                    testchar[indexOfnew--] = '%';
                } else {
                    testchar[indexOfnew--] = testchar[indexOfold];
                }
                indexOfold--;
            }
        } else {
            return null;
        }
        return testchar;

    }

    public static int getBlackCount(String str) {

        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            String teststr = String.valueOf(str.charAt(i));
            if (teststr.equals(" ")) {
                count++;
            }
        }
        return count;
    }

    public static void printchar(char[] testchar) {

        for (int i = 0; i < testchar.length; i++) {

            System.err.print(testchar[i]);
        }
        System.err.println();

    }
}

当初我是从前往后弄得,时间复杂度为O(n的平方),看了后面的时间复杂度为O(n)的解法,算法的优化无非就是时间复杂度和空间复杂度两个方向考虑,或者取舍平衡。从前往后,遇到空格,用”%”将空格替换,之后移动后面的字符,将”2”放入,再移动后面所有的字符串,将”0”放入,再移动后面所有的字符串。从后往钱就不会出现这种现象,一次成型。注意做之前要考虑清楚这个数据后边是否有足够的空间,是在原数组处理还是额外的数上处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值