題目描述
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。
解一:
由於最近在學習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,表明所有空格都已經替換完畢。
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 }