目錄
1.316. 去除重復字母 - 力扣(LeetCode)
2.?1209. 刪除字符串中的所有相鄰重復項 II - 力扣(LeetCode
哎喲 煩死了 剛剛不小心退出又沒保存 又要寫一遍?
煩死了 最近刷題不得勁啊 感覺這腦子沒長一點
1.316. 去除重復字母 - 力扣(LeetCode)
哎喲 我真的覺得神奇 好奇妙啊 怎么想到的 我真的服了
它把一個字符串做單調棧搞
用兩個數組來保證字符串字典序最小(這里體現貪心的思想)與此同時又不重復?亞比 囧囧囧~~
你懂嗎。。。
class Solution {
public:string removeDuplicateLetters(string s) {vector<int> num(26), vis(26);for(char c : s){num[c - 'a']++;}string stk;for(char c : s){if(vis[c - 'a'] == 0){while(!stk.empty() && stk.back() > c){// 這個字符后面是不是還有 if(num[stk.back() - 'a'] > 0){vis[stk.back() - 'a'] = 0;stk.pop_back();}else{break;}}vis[c - 'a'] = 1;stk.push_back(c);}num[c - 'a']--;}return stk;}
};
2.?1209. 刪除字符串中的所有相鄰重復項 II - 力扣(LeetCode)
哎喲 我真的私密馬賽 我連個暴力我都要看答案 我去死算了 騙人的哈哈
要++count 不要count++?
修改后的字符串就等于原來的字符串長度了就意味著沒有要改變的了 可以結束返回了
class Solution {
public:string removeDuplicates(string s, int k) {int len = 0;while(len != s.size()){len = s.size();for(int i = 0, count = 1; i < s.size(); i++){if(i == 0 || s[i] != s[i-1]){count = 1;}else if(++count == k){s.erase(i - k + 1, k);break;}}}return s;}
};
為什么我想不到啊啊啊啊
是不是總結沒做到位有沒有用心用腦子呢??
怎么那天沒發出去。。。