劍指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();
    }
複製代碼

相關文章
相關標籤/搜索