1. 程式人生 > 其它 >力扣:面試題 01.03. URL化

力扣:面試題 01.03. URL化

技術標籤:演算法leetcode字串

題目

URL化。編寫一種方法,將字串中的空格全部替換為%20。假定該字串尾部有足夠的空間存放新增字元,並且知道字串的“真實”長度。(注:用Java實現的話,請使用字元陣列實現,以便直接在陣列上操作。)

示例 1:

輸入:"Mr John Smith ", 13
輸出:"Mr%20John%20Smith"
示例 2:

輸入:" ", 5
輸出:"%20%20%20%20%20"

想法

這裡一開始我想的是直接在原字串S中做改變,後來發現這種想法不對。下面介紹的兩種方法都是新建一個字串/字串陣列來做改變。

1.使用StringBuilder

小知識點:什麼時候用StringBuffer什麼時候用StringBuilder?

  • String:適用於少量的字串操作的情況
  • StringBuilder:適用於單執行緒下在字元緩衝區進行大量操作的情況
  • StringBuffer:適用多執行緒下在字元緩衝區進行大量操作的情況
class Solution {
    public String replaceSpaces(String S, int length) {
        //1.使用StringBuilder
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < length; i++){
            if(S.charAt(i) == ' '){
                sb.append("%20");
            }else{
                sb.append(S.charAt(i));
            }
        }
        return sb.toString();
    }
}

2.字串陣列

  1. 定義一個字串陣列char[]和一個下標index=0
  2. 遍歷,檢視S中每個字元是否為空,為空的話,字串數字char[index++]依次等於‘%20’
  3. 不為空的話,直接將這個字元複製到char[]中,即char[index++]=c
class Solution {
    public String replaceSpaces(String S, int length) {
        //2.字串陣列
        //這裡相當於一個空格變成'%20'三個字元,為了防止過界,分配三倍的空間
        char[] ch = new char[length*3];
        int index = 0;
        for(int i = 0; i < length; i++){
            char c = S.charAt(i);
            if(c == ' '){
                ch[index++] = '%';
                ch[index++] = '2';
                ch[index++] = '0';
            }else{
                ch[index++] = c;
            }
        }
        return new String(ch, 0, index);
    }
}

知識點小結

知識點一:程式碼中涉及到了字串陣列轉化成字串的問題

看這個https://blog.csdn.net/qq_38617531/article/details/80953130

1.StringBuilder/StringBuffer xx=newStringBuilder/StringBuffer();(像上面的方法1中的程式碼)

這類使用toString()方法。String s = xx.toString();

2.char[] ch = new char[XX];(像上面的方法2中的程式碼)

String s = new String(ch);

注:returnnewString(ch,0,index); 這種應該是將下標0~index的字元轉化成String型別。

知識點二:關於substring()方法

它的擷取範圍是[begin,end),包含前面不包含後面,前閉後開區間。(經常記混不清楚包含前面還是包含後面)

舉個例子:"hamburger".substring(4, 8) returns "urge"

參考:https://leetcode-cn.com/problems/string-to-url-lcci/solution/java-san-chong-jie-fa-stringde-api-zi-fu-shu-zu-st/