【題目】
給定乙個字元型別的陣列chas,chas的右半區全是空字元,左半區不含有空字元。現在想將左半區中所有的空格字元替換成「%20」,假設chas的右半區足夠大,可以滿足替換所需要的空間,請完成替換函式。要求時間複雜度o(n),空間複雜度o(1)。
【補充題目】
給定乙個字元型別的陣列chas,其中只含有數字字元和『 * 』字元。現在想將所有的 『 * 』字元都放在chas的左邊,數字字元放在chas 的右邊。請完成調整函式。
【基本思路】
以上兩個題目都是利用倒著複製的技巧。
對於原問題首先求出左半區的長度length,然後求出空格字元的個數num,進而可以求出替換後的有效長度,即newlen = length + num * 2。然後從chas的最後乙個有效字元開始倒著遍歷,同時將字元複製到新長度的最後位置,並依次倒著向左複製。遇到空格字元就依次把『0』,『2』,『%』進行複製。
對於補充問題。同樣是從右到左倒著複製,遇到數字字元就直接複製,遇到『 * 』不複製。當把數字字元複製完,陣列的其餘部分都設定成『 * 』。
下面是使用python3.5實現的**
#字串的調整與替換
#原問題
defadjustandreplace
(chas):
if chas == none
or len(chas) == 0:
return chas
length = 0
num = 0
for i in range(len(chas)):
if chas[i] != '':
length += 1
if chas[i] == ' ':
num += 1
else:
break
newlen = length + 2 * num
for i in range(length-1, -1, -1):
if chas[i] != ' ':
chas[newlen-1] = chas[i]
newlen -= 1
else:
chas[newlen-1] = '0'
chas[newlen-2] = '2'
chas[newlen-3] = '%'
newlen -= 3
return
''.join(chas)
#補充問題
defmodify
(chas):
if chas == none
or len(chas) == 0:
return chas
n = len(chas)
for i in range(len(chas)-1, -1, -1):
if chas[i] != '*':
chas[n-1] = chas[i]
n -= 1
for i in range(n-1, -1, -1):
chas[i] = '*'
return chas
字串問題 字串的統計字串
題目 給定乙個字串str,返回str的統計字串。例如,aaabbadddffc 的統計字串為 a 3 b 2 1 d 3 f 2 c 1 補充題目 給定乙個字串的統計字串cstr,再給定乙個整數index,返回cstr所代表的原始字串上第index個字元。例如,a 1 b 100 所代表的原始字串上...
字串的調整與替換
題目 給定乙個字元型別的陣列chas,chas右半區全是空字元,左半區不含有空字元。現在想將左半區中所有的空格字元替換成 20 假設chas右半區足夠大,可以滿足替換所需要的空間,請完成替換函式。舉例 如果把chas的左半區看作字串,為 a b c 假設chas的右半區足夠大。替換後,chas的左半...
演算法題 字串空格替換
描述 請編寫乙個方法,將字串中的空格全部替換為 20 假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度 小於等於1000 同時保證字串由大小寫的英文本母組成。給定乙個string inistring 為原始的串,以及串的長度 int len,返回替換後的string。測試樣例 mr jo...