• 24去除重复字母(316)


    作者: Turbo时间限制: 1S章节: 贪心

    晚于: 2020-07-22 12:00:00后提交分数乘系数50%

    截止日期: 2020-07-29 12:00:00

    问题描述 :

    给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

    示例 1:

    输入: "bcabc"

    输出: "abc"

    示例 2:

    输入: "cbacdcbc"

    输出: "acdb"

    输入说明 :

    输入一个仅包含小写字母的字符串

    输出说明 :

    输出结果。首尾无多余空格或空行。

    输入范例 :

    输出范例 :

    1,如果stk栈顶的元素大于当前遍历到的元素,根据上述原则,则应该在条件允许的情况下回避这一情况,根据题目要求(去重),只有在后续还有这个栈顶元素的情况下才能将这个栈顶元素去掉(减少一个逆序)。如果后续没有这个栈顶元素,则只能将它保留在这儿,即使它大于它的下一个元素。

    2这样一来,stk中保存的两两相邻元素要么是顺序的(前一个小于后一个)要么是逆序的(前一个大于后一个,虽有违背最小排列,但由于没有后续相同元素可以替换,只能这样将就)。

    3,由2)可知如果当前元素存在于stk中,则说明stk中的这个元素已经是顺序的了(^-^),所以应该在循环中先判断这一情况,直接跳过当前元素。

    4,同时,当根据条件去掉一个栈顶元素时,新的栈顶元素可能也大于当前元素,所以应该继续判断新的栈顶元素和当前元素的关系,用一个while循环,直到出现一个不满足循环条件的栈顶元素(要么小于当前元素,要么大于当前元素但后续又无与之相同的元素来替代)。
    作者:fu-guang
    链接:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/c-0ms-ji-bai-100jian-ming-dai-ma-chao-xiang-xi-jie/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std; 
    
    class Solution {
    public:
        string removeDuplicateLetters(string s)
        {
            string str;
            int i=0;
            for(i=0;i<s.size();i++)
            {
                if(str.find(s[i])!=string::npos)//str.find("哦")!=string::npos则说明字符串str中存在“哦”这个字符
                    continue;
                while(!str.empty()&&str.back()>s[i]&&s.find(str.back(),i)!=string::npos)////从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标position=s.find("b",5);
                    str.pop_back();
                str.push_back(s[i]);
            }
            return str;
        }
    };
    int main()
    {
        string s;
        cin>>s;
        string res="";
        res=Solution().removeDuplicateLetters(s);
        cout<<res;
    } 
    //http://www.cppblog.com/lmlf001/archive/2006/04/19/5883.html
    //https://leetcode-cn.com/problems/remove-duplicate-letters/solution/c-0ms-ji-bai-100jian-ming-dai-ma-chao-xiang-xi-jie/
  • 相关阅读:
    TypeScript系列
    常用软件工具
    How to change Eclipse loading image
    【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置
    【奥斯卡理财星体系 第四章】丨你该如何选择适合的理财工具
    【奥斯卡理财星体系 第三章】丨你适合追求什么样的收益率
    ASP.NET Core使用Elasticsearch记录API请求响应日志实战演练
    C# Quartz.NET实现动态改变作业调度周期
    openssl 生成pfx
    netcore进程内(InProcess)托管和进程外(out-of-Process)托管
  • 原文地址:https://www.cnblogs.com/zmmm/p/13622343.html
Copyright © 2020-2023  润新知