老實說,貌似直接能夠實現。。代碼以下:html
class Solution { public string replaceSpace(string str) { return str.Replace(" ","%20"); } }
使用兩個指針,方法借鑑於Edison Chou。app
先遍歷一次字符串,這樣就能統計出字符串中空格的總數,並能夠由此計算出替換以後的字符串的總長度。函數
之前面的字符串"We arehappy."爲例,"We are happy."這個字符串的長度是14(包括結尾符號'\0'),裏面有兩個空格,所以替換以後字符串的長度是18。從字符串的後面開始複製和替換。準備兩個指針,P1和P2。P1指向原始字符串的末尾,而P2指向替換以後的字符串的末尾。接下來向前移動指針P1,逐個把它指向的字符複製到P2指向的位置,直到碰到第一個空格爲止。接着向前複製,直到碰到第2、三或第n個空格。時間複雜度爲O(n),實現方法以下圖:spa
代碼實現:3d
public static void ReplaceBlank(char[] target, int maxLength) { if (target == null || maxLength <= 0) { return; } // originalLength 爲字符串target的實際長度 int originalLength = 0; int blankCount = 0; int i = 0; while (target[i] != '\0') { originalLength++; // 計算空格數量 if (target[i] == ' ') { blankCount++; } i++; } // newLength 爲把空格替換成'%20'以後的長度 int newLength = originalLength + 2 * blankCount; if (newLength > maxLength) { return; } // 設置兩個指針,一個指向原始字符串的末尾,另外一個指向替換以後的字符串的末尾 int indexOfOriginal = originalLength; int indexOfNew = newLength; while (indexOfOriginal >= 0 && indexOfNew >= 0) { if (target[indexOfOriginal] == ' ') { target[indexOfNew--] = '0'; target[indexOfNew--] = '2'; target[indexOfNew--] = '%'; } else { target[indexOfNew--] = target[indexOfOriginal]; } indexOfOriginal--; } }