hive 字串替換指定字元 字串 替換空格

2021-10-14 05:28:32 字數 1920 閱讀 2265

遇到對字串或者陣列做填充或刪除的操作時,都要想想從後向前操作怎麼樣。

❞請實現乙個函式,把字串 s 中的每個空格替換成"%20"。

如果想把這道題目做到極致,就不要只用額外的輔助空間了!

首先擴充陣列到每個空格替換成"%20"之後的大小。

然後從後向前替換空格,也就是雙指標法,過程如下:

i指向新長度的末尾,j指向舊長度的末尾。

有同學問了,為什麼要從後向前填充,從前向後填充不行麼?

從前向後填充就是o(n^2)的演算法了,因為每次新增元素都要將新增元素之後的所有元素向後移動。

「其實很多陣列填充類的問題,都可以先預先給陣列擴容帶填充後的大小,然後在從後向前進行操作。」

這麼做有兩個好處:

不用申請新陣列。

從後向前填充元素,避免了從前先後填充元素要來的 每次新增元素都要將新增元素之後的所有元素向後移動。

class solution 

}// 擴充字串s的大小,也就是每個空格替換成"%20"之後的大小

s.resize(s.size() + count * 2);

int snewsize = s.size();

// 從後先前將空格替換為"%20"

for (int i = snewsize - 1, j = soldsize - 1; j             if (s[j] != ' ')  else 

}return s;}};

時間複雜度:o(n)

空間複雜度:o(1)

這裡也給大家拓展一下字串和陣列有什麼差別,

字串是若干字元組成的有限序列,也可以理解為是乙個字元陣列,但是很多語言對字串做了特殊的規定,接下來我來說一說c/c++中的字串。

在c語言中,把乙個字串存入乙個陣列時,也把結束符 '\0'存入陣列,並以此作為該字串是否結束的標誌。

例如這段**:

char a[5] = "asd";

for (int i = 0; a[i] != '\0'; i++) 

在c++中,提供乙個string類,string類會提供 size介面,可以用來判斷string類字串是否結束,就不用'\0'來判斷是否結束。

例如這段**:

string a = "asd";

for (int i = 0; i }

那麼vector< char > 和 string 又有什麼區別呢?

所以想處理字串,我們還是會定義乙個string型別。

-------end-------

我將演算法學習相關的資料已經整理到了github :裡面還有leetcode刷題攻略、各個型別經典題目刷題順序、思維導圖看一看一定會有所收穫!

趕緊給「**隨想錄」加乙個星標吧,方便第一時間閱讀文章往期

精彩回顧字串:簡單的反轉還不夠!字串:這道題目,使用庫函式一行**搞定陣列:總結篇陣列:這個迴圈可以轉懵很多人!陣列:滑動視窗拯救了你

「**隨想錄」期待你的關注!

每天8:35準時推送一道經典演算法題目,推送的每道題目都不是孤立的,而是由淺入深,環環相扣,幫你梳理演算法知識脈絡,輕鬆學演算法!

c 快速替換字串指定字元

專案中偶爾要用到替換指定字元的功能,因為不常用每次一用到的就去官方文件看,總得花點兒時間感覺不是那麼好用,自己想了個辦法,可能性能不是最好的但我感覺應該是最直觀明了的 以下是實現 include include include include using namespace std int main...

php替換字串字元,php如何替換字串裡的字元

php替換字串裡字元的方法 1 通過substr replace函式把字串的一部分替換為另乙個字串 2 使用str replace函式將乙個字串替換字串中的另一些字元。php 字串替換 用於從字串中替換指定字串。str replace 使用乙個字串替換字串中的另一些字元 substr replace...

替換字串中連續出現的指定字串

給定三個字串str,from和to,把str中所有的from的子串全部替換成to字串,對連續出現的from的部分要求只替換成乙個to字串,返回最終的結果字串。舉個栗子 str 123abc from abc to 4567 返回 1234567 str 123 from abc to 456 返回 ...