因爲最近在學習Head First Java,因此最早考慮到的就是使用字符串拼湊,思路很簡單,沒有考慮什麼時間複雜度,直接看代碼。數組
1 public class Solution { 2 public String replaceSpace(StringBuffer str) { 3 String str1=str.toString(); 4 char[] charArray = str1.toCharArray(); 5 StringBuilder sBuilder = new StringBuilder(); 6 for (char c : charArray) { 7 if(c==' ') { 8 sBuilder.append("%20"); 9 }else { 10 sBuilder.append(c); 11 } 12 } 13 String string = sBuilder.toString(); 14 return string; 15 } 16 }
思路:從字符串的後面開始複製和替換,首先準備兩個指針,p1和p2,p1指向原始字符串的末尾,p2指向替換後字符串的末尾,接下來,向前移動指針p1,逐個把它指向的字符複製到p2,碰到一個空格以後,把p1向前移動1格,在p2處插入字符串「20%」,因爲「20%」長度爲3,同時也要把p2向前移動3格。直到p1=p2,代表全部空格都已經替換完畢。app
1 public class ReplaceSpace { 2 3 public static void main(String[] args) { 4 Scanner scanner = new Scanner(System.in); 5 String str=scanner.nextLine(); 6 scanner.close(); 7 char[] charArray = str.toCharArray(); 8 int length=charArray.length; 9 int spaceNumber=0;//獲取空格數量 10 for (char c : charArray) { 11 if(c==' ') { 12 spaceNumber++; 13 } 14 } 15 int newLength=length+spaceNumber*2; 16 char[] tempArray=new char[newLength];//新的數組的長度 17 System.arraycopy(charArray, 0, tempArray, 0, length);//將原來的數組拷貝到新長度的數組中 18 int indexofOriginal = length - 1; 19 int indexofNew = newLength - 1; 20 while (indexofOriginal>=0&&indexofOriginal!=indexofNew) { 21 if (tempArray[indexofOriginal]==' ') { 22 tempArray[indexofNew--] = '0'; 23 tempArray[indexofNew--] = '2'; 24 tempArray[indexofNew--] = '%'; 25 }else { 26 tempArray[indexofNew--] = tempArray[indexofOriginal]; 27 } 28 indexofOriginal--; 29 30 } 31 for (char c : tempArray) { 32 System.out.print(c); 33 } 34 } 35 36 }