題目描述:
解析:
直觀的想法是,新建乙個陣列,逐個複製,遇到空格時,寫入%20,但這需要占用額外空間。
不占用額外空間的演算法是原位替換。如果我們順序的遍歷字串,當遇到空格時,用%20替換空格,這將覆蓋掉空格後面的字元 || 如果覆蓋前,後移剩餘字串,那麼移動的時間複雜度為o(n^2).
因此,採用從後向前複製的方式。
注意:以下的新舊字串是同乙個字串,只是乙個是替換前,乙個指替換後
首先統計空格的個數,計算出新字串的長度,然後用2個指標,1個指向新字串尾,1個指向舊字串尾,兩指標同步向前,遇到空格時,新索引指標按位址寫入%20,當新舊指標相等時說明已經替換完全部空格。
從後向前的處理方式,不會覆蓋原有的資料,也不會產生多餘的資料移動。
#include
using namespace std;
void replaceblank(char
str, int len)
int oldindex = oldlen; //之所以不-1,是因為字串陣列尾部的'\0'
int newindex = oldlen + 2*blank ;
if (newindex+1 > len) // 原有陣列空間不足
return;
while (newindex != oldindex) else
oldindex--;
}}int main()
替字串中的換空格 C 實現
時間複雜度為o n 2 的解法 思路 從頭到尾掃瞄字串,每一次碰到空格字元的時候做替換,即把1個字元替換成3個字元 我們必須要把空格後面所有的字元向後移動兩個位元組,否則就有兩個字元被覆蓋了。基於如上思路,實現如下 void solution replacespace1 char str,int l...
程式設計師面試金典第一章 陣列與字串(4) 空格替換
1.1 題目描述 請編寫乙個方法,將字串中的空格全部替換為 20 假定該字串有足夠的空間存放新增的字元,並且知道字串的真實長度 小於等於1000 同時保證字串由大小寫的英文本母組成。給定乙個string inistring 為原始的串,以及串的長度 int len,返回替換後的string。測試樣例...
4 替換字串中的所有空格
title 一 將字串中的所有空格用 20替換 二 擴充套件 將兩個有序的陣列連線成乙個有序陣列,第乙個陣列足夠大 thought 1 原串的記憶體足夠大,在原串中實現替換 2 可開闢新空間,將原串複製到新串的過程中把空格替換 realize 一 實現第乙個想法 1 統計原串s中 長度len 空格的...