JZ2 替換空格

2021-10-10 01:48:18 字數 714 閱讀 5058

題解:

最直觀的解法是對字串進行遍歷,每次遍歷到空格之後,將其替換為「%20」,這樣,對於n個空格,需要把剩下的字串移動n次,這樣整個演算法時間複雜度就是o(n^2)。為了節省時間,我們可以採用空間換取時間的方式,首先遍歷一遍字串,統計空格的數量,並由此建立輔助陣列;接著第二次遍歷字串,將空格替換為「%20」儲存在輔助陣列中,這樣需要的時間複雜度為o(n),但需要的空間複雜度為o(n)。使用空間換取時間的方式還可以用佇列實現,同樣也需要o(n)的空間。

不過這樣就是最優的解法了嗎,我們是否可以找到不需要額外輔助陣列的方法進行;首先從第二種解法中獲得啟發,我們先遍歷一遍字串陣列,那麼我們可以事先計算好替換後的字串的總長度,然後,在遍歷替換空格的時候,採用從後向前遍歷,不是空格的直接移動到最後的位置,這樣,我們就可以一次性移動整個陣列而不需要額外的時間開銷,時間複雜度為o(n);

**:

class solution 

int space_nb = 0;

int replace_len = 0;

int i;

for(i = 0; i < length; i ++)

} if (str[i-1] != '\0')

return;

if (space_nb != 0)else

} }

}};

2 替換空格

1 題目 2 程式1 確定變換後陣列的長度,再從後往前更新陣列,記得在最開始要先加 0 class solution int newstrlen strlen spacenum 2 int j newstrlen str j 0 for int i strlen 1 i 0 i else str j...

2 替換空格

c class solution 替換空格 int newlength originallength 2 numberofblank if newlength 1 length return char p1 str originallength 字元指標指向原始字串的末尾 char p2 str n...

2 替換空格

暴力法 從頭到尾掃瞄,遇到空格就替換,並將空格之後的所有字元都後移兩個位元組。時間複雜度o n 2 優化 先遍歷一遍字串,這樣就可以統計出字串空格的總數,並可以由此計算出替換之後的字串的總長度。每替換乙個空格,長度增加2,因此替換以後字串的長度等於原來的長度加上2乘以空格數目。之後,我們從字串的尾部...