力扣:面試題 01.03. URL化
阿新 • • 發佈:2020-12-15
題目
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.字串陣列
- 定義一個字串陣列char[]和一個下標index=0
- 遍歷,檢視S中每個字元是否為空,為空的話,字串數字char[index++]依次等於‘%20’
- 不為空的話,直接將這個字元複製到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"