剑指Offer题解

替换空格

2018-07-06  本文已影响10人  lvlvforever

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

最容易想到的方法是遍历字符串,遇到一个空格则进行替换,同时需要将后面的字符依次后移,这样操作时间复杂度也是最高的,O(n^2)。
一个空格需要被%20代替,如果得知了空格的数量,那么增加的长度也是确定的了。
我们可以先遍历一遍,获取空格数量,然后对字符数组扩容,从后往前遍历字符,遇到空格则替换为%20。

在进行合并操作时,如果从前往后合并移动元素过多,不如试试从后往前。

以下代码仅供参考

 if (str == null || str.length() < 1) {
            return "";
        }
        int spaceCount = 0;
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == ' '){
                spaceCount++;
            }
        }
        int length = str.length();
        int finalLength = length + spaceCount*2; //计算最终长度
        int ptr = finalLength-1;
        str.setLength(finalLength);
        for (int i = length-1; i >= 0; i--) {
            char ch = str.charAt(i);
            if(ch == ' '){
                str.setCharAt(ptr--,'0');
                str.setCharAt(ptr--,'2');
                str.setCharAt(ptr--,'%');
            }else{
                str.setCharAt(ptr--,ch);
            }
        }

        return str.toString();
上一篇 下一篇

猜你喜欢

热点阅读