剑指Offer题目4:替换空格(Java)

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

思路分析

  1. brute force

从前日后替换。bash

缺陷:时间复杂度是 O(n^2)。由于每次都得移动空格后面全部的字符串,效率低下。app

  1. 最优解

从后往前替换。函数

优势:时间复杂度是 O(n)。每次替换只须要操做当前字符。ui

public static String replaceSpace(StringBuffer str) {
        if(str == null) {
            return null;
        }
        int spaceNum = 0;
        int oldIndex = str.length() - 1;
        for(int i=0; i<str.length(); i++) {
            if(str.charAt(i) == ' ') {
                spaceNum ++;
            }
        }
        int newLength = str.length() + 2*spaceNum;
        int newIndex = newLength - 1;
        str.setLength(newLength);
        while(oldIndex >= 0 && oldIndex < newLength){
            if(str.charAt(oldIndex) == ' '){
                str.setCharAt(newIndex --, '0');
                str.setCharAt(newIndex --, '2');
                str.setCharAt(newIndex --, '%');
            } else {
                str.setCharAt(newIndex --, str.charAt(oldIndex));
            }
            oldIndex --;
        }
        return str.toString();
    }
复制代码

相关文章
相关标签/搜索