日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)

發(fā)布時間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 題目

給你一個字符串 s,「k 倍重復項刪除操作」將會從 s 中選擇 k 個相鄰且相等的字母,并刪除它們,使被刪去的字符串的左側(cè)和右側(cè)連在一起。

你需要對 s 重復進行無限次這樣的刪除操作,直到無法繼續(xù)為止。

在執(zhí)行完所有刪除操作后,返回最終得到的字符串。

本題答案保證唯一。

示例 1: 輸入:s = "abcd", k = 2 輸出:"abcd" 解釋:沒有要刪除的內(nèi)容。示例 2: 輸入:s = "deeedbbcccbdaa", k = 3 輸出:"aa" 解釋: 先刪除 "eee""ccc",得到 "ddbbbdaa" 再刪除 "bbb",得到 "dddaa" 最后刪除 "ddd",得到 "aa"示例 3: 輸入:s = "pbbcggttciiippooaais", k = 2 輸出:"ps"提示: 1 <= s.length <= 10^5 2 <= k <= 10^4 s 中只含有小寫英文字母。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string-ii
著作權(quán)歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 棧解題

  • 將當前字符和其連續(xù)的個數(shù)存入棧中
  • 個數(shù)達到 k 時出棧 k 個
class Solution { public:string removeDuplicates(string s, int k) {int i, count = 0;stack<pair<char,int>> stk;char prev = '*';for(i = 0; i < s.size(); ++i){if(prev != s[i]){count = 1;stk.push(make_pair(s[i],count));prev = s[i];}else//prev == s[i]{count = stk.top().second + 1;stk.push(make_pair(s[i],count));prev = s[i];if(count == k){while(count--)stk.pop();if(!stk.empty())prev = stk.top().first;elseprev = '*';}}}string ans;while(!stk.empty()){ans += stk.top().first;stk.pop();}reverse(ans.begin(),ans.end());return ans;} };

  • 優(yōu)化上面程序:相同的不必壓棧了,直接改pair的second計數(shù)+1,減少壓棧,彈棧時間
class Solution { public:string removeDuplicates(string s, int k) {int i, count = 0;stack<pair<char,int>> stk;char prev = '*';for(i = 0; i < s.size(); ++i){if(prev != s[i]){count = 1;stk.push(make_pair(s[i],count));prev = s[i];}else//prev == s[i]{stk.top().second++;//直接+1if(stk.top().second == k){stk.pop();if(!stk.empty())prev = stk.top().first;elseprev = '*';}}}string ans;while(!stk.empty()){count = stk.top().second; while(count--) ans += stk.top().first;stk.pop();}reverse(ans.begin(),ans.end());return ans;} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。