27.哀家要长脑子了!

目录

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;
    }
};

为什么我想不到啊啊啊啊

是不是总结没做到位有没有用心用脑子呢??

怎么那天没发出去。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值