劍指offer 4 替換空格

2021-10-05 17:39:01 字數 1259 閱讀 9974

該問題如果採用暴力方法:從前往後遍歷,如果遇到空格,開始整體資料向後移動2位,插入%20,一直到結束。採用這樣的方法,時間複雜度為o(n

2)

o(n^2)

o(n2

),比較耗時間,也不是理想的方案。

上面的方案,可以看出有很大的改進空間,如果知道了空格的個數,直接從後往前遍歷,這樣每個元素都能放到最終位置,而不是向暴力方法那樣移動很多步。即:從前往後進行遍歷,找到字串中空格的個數,然後從後往前遍歷,放入最終位置。

**:

#include

#include

using namespace std;

void

replacespace

(char

*str,

int length)

for(

int i =

0; str[i]

!=null

; i++)if

(str_len + cnt *

2> length)

return

;//length += cnt;

int new_len = str_len + cnt *2;

str[new_len +1]

='\0'

;for

(int i = new_len; i >=

0&& cnt >0;

--i)

else

--str_len;}}

intmain

(int argc,

char

*ar**)

其他:

本來很簡單的題目,但自己沒有設定好邊界條件,加上寫的過程中有幾個小bug,除錯了一會兒才發現問題,耗時1h才完全解決。太久不寫**的鍋?

寫作中遇到的幾個bug:

str[new_len] = '\0';總長度是怎麼回事沒想清楚

for (int i = new_len -1; i >= 0 && cnt >= 0; --i)這裡還是對新增後的陣列是怎樣的情況不清晰,同時cnt這裡的判斷應該是cnt>0,不然設定這樣的判斷沒任何效果。

str[i] = str[str_len -- ];這裡只有在if中str_len才-1,導致程式崩了。。。

幾個點:邊界條件這些應該在開始之前就想清楚,而不是寫好後再找bug。此時這些bug潛藏得比較深,不容易發現。

劍指offer 4 替換空格

1.c c 中每個字串都以字元 0 作為結尾。string s a coutcoutcout2.當幾個指標賦給相同的常量字串時,它們實際上會指向相同的記憶體位址。但用常量記憶體初始化陣列,情況卻有所不同。char c1 a char c2 a char c3 a char c4 a cout c1 ...

劍指offer(4)替換空格

看到替換,我們首先應該想到的是原來乙個空格字元,替換之後變成 2 和 0 這3個字元,因此字串會變長。首先我們要向面試官詢問是新建字串還是在原有字串上面修改,本體要求是在原有字串上進行修改。思路1 如果從前到後遍歷,遇到空格,就替換 空格後面字元需要自後向前向後移動兩個空格 那麼時間複雜度是o n2...

劍指offer 替換空格

思路 首先遍歷字串,找出空格的數量countspace,計算變換後的總長為newlength str.length 2 countspace。定義心得字元陣列,長度為newlength 從字串的後面開始複製和替換,如果不是空格,就複製,如果是空格,就變為 20.難點 牛客網上傳入引數是stringb...