給出由小寫字母組成的字符串 S,重複項刪除操做會選擇兩個相鄰且相同的字母,並刪除它們。php
在 S 上反覆執行重複項刪除操做,直到沒法繼續刪除。數組
在完成全部重複項刪除操做後返回最終的字符串。答案保證惟一。函數
示例:code
輸入:"abbaca" 輸出:"ca" 解釋: 例如,在 "abbaca" 中,咱們能夠刪除 "bb" 因爲兩字母相鄰且相同,這是此時惟一能夠執行刪除操做的重複項。 以後咱們獲得字符串 "aaca",其中又只有 "aa" 能夠執行重複項刪除操做,因此最後的字符串爲 "ca"。
提示:blog
str_replace
將 aa 到 zz 的 26 種重複項放入集合中,將字符串中這些重複項替換成空字符串。隊列
function removeDuplicates($S) { $vowels = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii', 'jj', 'kk', 'll', 'mm', 'nn', 'oo', 'pp', 'qq', 'rr', 'ss', 'tt', 'uu', 'vv', 'ww', 'xx', 'yy', 'zz']; while (strlen($S) >= 2) { $S = str_replace($vowels, "", $S); if ($S == str_replace($vowels, "", $S)) { break; } } return $S; }
首先把字符串轉化爲數組,能夠把這個字符串數組當作一個隊列;
設置一個棧,判斷字符串數組的隊頭元素和棧頂元素是否相等,若是不相等,就將字符串數組的隊首元素出隊,壓入棧中,
反之,則將隊首元素出隊,同時將棧頂元素彈出。
時間複雜度:O(N),空間複雜度:O(N)。
rem
function removeDuplicates($S) { if (strlen($S) <= 1) { return $S; } $stack = []; $arr = str_split($S); while (!empty($arr)) { if (empty($stack)) { $stack[] = array_shift($arr); } else { if (current($arr) == end($stack)) { array_shift($arr); array_pop($stack); } else { $stack[] = array_shift($arr); } } } return implode("", $stack); }