目录
[1.316. 去除重复字母 - 力扣(LeetCode)](#1.316. 去除重复字母 - 力扣(LeetCode))
[2. 1209. 删除字符串中的所有相邻重复项 II - 力扣(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;
}
};
为什么我想不到啊啊啊啊
是不是总结没做到位有没有用心用脑子呢??
怎么那天没发出去。。。