1. 程式人生 > >劍指Offer,面試題4,替換空格,Java寫法

劍指Offer,面試題4,替換空格,Java寫法

題目:請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

思路就是如果從左到右去插入的話,時間複雜度為O(n2),先確定空格的個數,然後確定替換後的String長度,從右到左插入的話時間複雜度為O(n)

簡單的,但時間複雜度高的程式碼:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replaceAll("\\s", "%20");
    }
}
我的程式碼:
public class Solution {
    public String replaceSpace(StringBuffer str) {
    	  int originalLength = str.length()-1;  //字串str原長度
       int numberOfBlank = 0;   //空格的個數
           //int i = 0;
        for(char c : str.toString().toCharArray()){
            if (c == ' '){
                numberOfBlank++;
            }
        }
       int newLength = originalLength + numberOfBlank*2+1;
           str.setLength(newLength);
           newLength = newLength-1;
           while (originalLength >= 0 && newLength > originalLength){
               if (str.charAt(originalLength) == ' '){
                      str.setCharAt(newLength--,'0');
                      str.setCharAt(newLength--,'2');
                      str.setCharAt(newLength--,'%');
                  }else{
                      str.setCharAt(newLength--,str.charAt(originalLength));
                  }
               originalLength--;
           }
      return str.toString();
    }
  public static void main(String args[]){
        StringBuffer str = new StringBuffer();
        str.append(" helloworld");
}
}


相關推薦

Offer試題4,替換空格Java寫法

題目:請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 思路就是如果從左到右去插入的話,時間複雜度為O(n2),先確定空格的個數,然後確定替換後的String長度,從右到左插

offer試題 5. 替換空格

pla AC append replace for turn app null string 面試題 5. 替換空格 題目:請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy. 則經過替換之後的字符串為We%20Are%2

offer試題4替換空格 java

題目: 請實現一個函式,把字串中的每個空格替換成“20%”。例如輸入“We are happy.”,則輸出“We%20are%20happy.”。 public class Replace { public Replace() { // TODO Auto-gener

offer試題 4.二維數組中的查找

這樣的 || int targe arr find off col lean 面試題 4. 二維數組中的查找 題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組

offer試題4

面試題4:如果直接每次遇到空格新增’%20’,那麼空格後面的數字就需要頻繁向後移動。遇到這種移動問題,我們可以嘗試先給出最終需要的長度,然後從後向前掃描,同時給定兩個指標來保證定位。逆向思維 編譯器:python3.5.2 程式設計環境:pycharm2018.1.2x6

offer試題4 二維陣列中的查詢

題目: 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下的遞增的順序排序,請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 解題思路 關鍵是,我們從哪裡開始查詢? 如果是從頭開始查,那麼所查之數比陣列當前遍歷元素大的話,我們怎

offer試題4:二維陣列中的查詢

題目: 在一個二維陣列中,每一行都按照從左到右遞增的順序排列,每一列都按照從上到下遞增的順序排列。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 查詢規則:首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,則查詢過程結束;如果

Offer試題4 替換空格

題目要求:請實現一個函式,把字串中的每個空格替換成"%20"。例如輸入"We are happy.",則輸出"We%20are%20happy." 解題思路1:在原有的字串上進行替換,將原來的一個空格替換成"%"、"2"、"0"這3個字元(字串會因此變長,我們要保證原有的字串後面有足夠多的空餘記

offer試題4替換空格

題目比較簡單,把字串中的空格替換為相應的字串 如果從前開始迴圈替換,每移動一個元素,後面的資料都需要移動,因此選用的方法應該是從後面行前替換 #include "static.h" #include <iostream> using namespace std;

JavaOffer試題2:替換空格

替換空格 題目描述:請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 思路:建立StringBuffer物件,然後將StringBuffer物件轉成字串物件,接著呼叫字串物件的replace方法,將空格

offer試題39 二叉樹的深度(java

設計模式 博客 rgs 歷史 存在 復制 pri 取值 今天 摘要: 今天翻到了《劍指offer》面試題39,題目二中的解法二是在函數的參數列表中通過指針的方式進行傳值,而java是沒有指針的,所以函數要進行改造。然而我翻了下別人的java版本(我就想看看有什麽高大上的改造

offer試題43 n個骰子的點數 (java

r+ nal ret 次循環 分而治之 源碼 ava 面試 ble 引言:寫這篇文章的初衷只是想做個筆記,因為這道題代碼量有點大,有點抽象,而書上並沒有詳細的註釋。為了加深印象和便於下次復習,做個記錄。 原題:把n個骰子扔到地上,所有骰子朝上一面的點數之後為s. 輸入n,打

offer試題 2. 實現 Singleton模式

模式 試題 枚舉 生成 test hand true 方法 單例模式 面試題 2. 實現 Singleton模式 題目:設計一個類,我們只能生成該類的一個實例。 單例模式:確保一個類只有一個實例,並提供了一個全局訪問點。 Code 1.餓漢模式 //餓漢模式 publ

offer試題 11. 旋轉數組的最小數字

最小數 urn 數字 number ret .so 所有 ID 元素 面試題 11. 旋轉數組的最小數字 題目描述 題目:把一個數組最開始的若幹個元素搬到數組的末尾,我們稱之為數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉, 輸出旋轉數組的最小元素。 例如數組{3

offer試題 28. 對稱的二叉樹

fin 技術分享 root 實現一個函數 面試題 分享 inf right png 面試題 28. 對稱的二叉樹 題目描述 題目:請實現一個函數,用來判斷一顆二叉樹是不是對稱的。註意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。 解答過程 給定一個二叉

offer試題 29. 順時針打印矩陣

如果 clas for 輸入 offer ID amp 代碼實現 AR 面試題 29. 順時針打印矩陣 題目描述 題目:輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 1

offer試題 49. 醜數

als pre ID offer get 素因子 ole bool 第一個 面試題 49. 醜數 題目描述 題目:把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第一個醜數。求按

offer試題10:斐波那契數列

題目一:求斐波那契數列的第n項 寫一個函式,輸入n,求斐波那契(Fibonacci)數列的第n項。斐波那契數列的定義如下: 當n=0時,f(n)=0; 當n=1時,f(n)=1; 當n>1時,f(n)=f(n-1)+f(n-2); 從下往上計算,首先根據 f(0)和 f(

offer試題32:從上到下列印二叉樹

題目一:不分行從上到下列印二叉樹 從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。 二叉樹節點的定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNo

offer試題9:用兩個棧實現佇列

題目:用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式appendTail 和deleteHead ,分別完成在佇列尾部插入節點和在佇列頭部刪除節點的功能。 template <typename T> class CQueue { public: CQueue(vo