思路:從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下,時間複雜度 o(n2)。
從後往前,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。時間複雜度o(n)。
1public
class
solution 89
int newlength = str.length() + spacenum *2;
10int p1 = str.length()-1;
11int p2 = newlength -1;
12str.setlength(newlength);
13for(;p1>=0 && p2>p1;p1--)else
19 str.setcharat(p2--,str.charat(p1));20}
21return
str.tostring();22}
23 }
publicclass
solution
else
str.setcharat(p2--,str.charat(p1--));
}return
str.tostring();
}}
更新20180303
1#-*- coding:utf-8 -*-
2class
solution:3#
s 源字串
4def
replacespace(self, s):5#
write code here
6 s =list(s)
7 cnt =0
8for i ins:9
if i=='':
10 cnt+=1
11 i = len(s)-1
12 s = s + ['
']*cnt*2
13 j = len(s)-1
14while i>=0 and j>=0:
15if(s[i]!=''):
16 s[j] =s[i]
17 i-=1;j-=1
18else
:19 s[j] = '0'
20 s[j-1] = '2'
21 s[j-2] = '%'
22 j-=3
23 i-=1
24return
''.join(s)
2526
27
trcik
1#-*- coding:utf-8 -*-
2class
solution:3#
s 源字串
4def
replacespace(self, s):5#
write code here
6return s.replace('
','%20')
789
4 代替字元陣列中的空格
題目描述 解析 直觀的想法是,新建乙個陣列,逐個複製,遇到空格時,寫入 20,但這需要占用額外空間。不占用額外空間的演算法是原位替換。如果我們順序的遍歷字串,當遇到空格時,用 20替換空格,這將覆蓋掉空格後面的字元 如果覆蓋前,後移剩餘字串,那麼移動的時間複雜度為o n 2 因此,採用從後向前複製的...
替字串中的換空格 C 實現
時間複雜度為o n 2 的解法 思路 從頭到尾掃瞄字串,每一次碰到空格字元的時候做替換,即把1個字元替換成3個字元 我們必須要把空格後面所有的字元向後移動兩個位元組,否則就有兩個字元被覆蓋了。基於如上思路,實現如下 void solution replacespace1 char str,int l...
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...