自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

每日算法:刪除字符串中的所有相鄰重復(fù)項

開發(fā) 前端 算法
給出由小寫字母組成的字符串 S ,重復(fù)項刪除操作 會選擇兩個相鄰且相同的字母,并刪除它們。在 S 上反復(fù)執(zhí)行重復(fù)項刪除操作,直到無法繼續(xù)刪除。

 [[419471]]

給出由小寫字母組成的字符串 S ,重復(fù)項刪除操作 會選擇兩個相鄰且相同的字母,并刪除它們。

在 S 上反復(fù)執(zhí)行重復(fù)項刪除操作,直到無法繼續(xù)刪除。

在完成所有重復(fù)項刪除操作后返回最終的字符串。答案保證唯一。

示例:

  1. 輸入:"abbaca" 
  2. 輸出:"ca" 
  3. 解釋: 
  4. 例如,在 "abbaca" 中,我們可以刪除 "bb" 由于兩字母相鄰且相同,這是此時唯一可以執(zhí)行刪除操作的重復(fù)項。之后我們得到字符串 "aaca",其中又只有 "aa" 可以執(zhí)行重復(fù)項刪除操作,所以最后的字符串為 "ca"。 

提示:

  1. <= S.length <= 20000
  2. S 僅由小寫英文字母組成。

解法:利用棧

解題思路: 遍歷字符串,依次入棧,入棧時判斷與棧頭元素是否一致,如果一致,即這兩個元素相同相鄰,則需要將棧頭元素出棧,并且當前元素也無需入棧

解題步驟: 遍歷字符串,取出棧頭字符,判斷當前字符與棧頭字符是否一致

  • 不一致,棧頭字符進棧,當前字符進棧
  • 一致,即棧頭字符與當前字符相同相鄰,都不需要進棧,直接進入下次遍歷即可

遍歷完成后,返回棧中字符串

代碼實現(xiàn):

  1. const removeDuplicates = function(S) { 
  2.     let stack = [] 
  3.     for(c of S) { 
  4.         let prev = stack.pop() 
  5.         if(prev !== c) { 
  6.             stack.push(prev) 
  7.             stack.push(c) 
  8.         } 
  9.     } 
  10.     return stack.join(''
  11. }; 
  • 時間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n

 

責任編輯:武曉燕 來源: 三分鐘學(xué)前端
相關(guān)推薦

2021-09-03 09:41:36

字符串時間復(fù)雜度

2021-09-02 09:22:13

算法無重復(fù)字符

2021-09-10 08:31:54

翻轉(zhuǎn)字符串單詞

2023-02-26 22:33:32

字符串排列算法

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2016-12-30 13:32:24

字符串算法代碼

2016-12-30 13:37:50

字符串算法代碼

2020-10-15 12:30:37

Python編程語言

2010-09-03 11:35:50

2025-04-27 10:02:50

JavaScript前端開發(fā)

2016-12-30 13:16:51

字符串算法代碼

2010-06-28 15:18:51

SQL Server

2015-08-13 10:42:49

.NET空白字符串

2015-10-29 11:55:30

.NET空白字符串方法

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2021-11-12 09:44:03

字符串算法復(fù)雜度

2023-10-20 15:58:27

Python刪除指定字符

2023-04-11 08:54:57

字符串匹配算法

2010-09-06 17:30:46

SQL函數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號