每天一道劍指offer-替換空格

  • 2019 年 10 月 4 日
  • 筆記

題目

每天一道劍指offer-替換空格 鏈接: http://t.cn/E2RV7Wv

題目詳述

請實現一個函數,將一個字元串中的每個空格替換成「%20」。例如,當字元串為We Are Happy.則經過替換之後的字元串為We%20Are%20Happy。

題目詳解

思路

  • 劍指offer的思路.就是一個空格變成了%20,也就是說每有一個空格,長度要增加2,所以首先先計算有多少個空格,這樣長度就能增加多少,得到增加後的長度Length。
  • 然後new一個Length長度的字元數組,從尾到頭開始複製原來的數組,如果複製過程中,如果字元不是空格,直接複製,如果字元是空格,那麼需要把這個空格變成%20(這個複製過程就是把新建的數組比如現在到了 K這個位置,然後就是K,K-1,K-2這三個位置依次變成0,2,%這三個字元,因為是從後往前複製的所以是倒序),重複這個過程就行。 如果相等,返回true;

程式碼

import java.util.*;  public class Solution {      public String replaceSpace(StringBuffer str) {          String str1 = str.toString();          if(str1.equals(""))              return str1;          char [] strArray = str1.toCharArray();          int i =0;          int lengthSpace = 0;          while(i < strArray.length)          {              if(strArray[i] == ' ')                  lengthSpace++;              i++;          }          int newStrLength = strArray.length + lengthSpace*2;          char [] newStr = new char[newStrLength];          int j = newStrLength-1;          i = strArray.length - 1;          while(i >= 0)          {              if(strArray[i] !=  ' ')              {                  newStr[j--] = strArray[i--];              }else{                  newStr[j--] = '0';                  newStr[j--] = '2';                  newStr[j--] = '%';                  i--;              }          }          return new String(newStr);      }  }  

程式碼講解

  • 7行把字元串轉換成字元數組
  • 8-15行 計算有多少個空格,16行就是計算新的字元數組的長度(每有一個空格,長度增加2)
  • 20-31行就是複製過程,22-24行就是如果原來的舊的字元數組不是空格這個字元,那麼新數組與舊數組的值一樣;
  • 25-29行就是如果舊的字元數組是空格,那麼新的字元數組這時候就得把j,j-1,j-2這三個位置變成0,2,%,然後重複20-31行這個過程就行。