• (字典序) leetcode 316. Remove Duplicate letters


    题意:给定一个字符串,删掉重复的元素,使得每个元素只出现一次,并确保结果的字典序最小。

    (悄咪咪的说:这道题是朋友昨天面试头条的第二道面试题....)

    两个字符串字典序是怎么比较大小的:如 abzzz 和 baert,先比较第一位字母的字典序,a<b,所以abzzz的字典序更小。

    如:abc 和 abcaaa, 就是abc的字典序更小。

    思路:定义两个hash表:hash记录 s里每个字符出现的个数,visited记录是否出现过。

    class Solution {
    public:
        string removeDuplicateLetters(string s) {
            unordered_map<char, int> hash , visited;
            for(auto a: s)
                hash[a] ++;   //记录每个字符出现的个数
            string res;
            for(int i=0; i<s.size(); i++){
                hash[s[i]] --;
                if(visited[s[i]]) continue;    //若前面出现过,直接考虑下一个字符
                
                //若当前元素s[i]的字典序比res的最后一个字符小 && res的最后一个字符以后还会出现,即hash[res.back()]>0 && res不为空
                while(!res.empty() && hash[res.back()] && res.back()>s[i]){
                    visited[res.back()] = 0;   //相应的置为未出现过   
                    res.pop_back();    //从结果中删除最后一个字符
                }
                //否则加入到res中
                res += s[i];
                visited[s[i]] = 1;    //同时置为出现过
            }
            return res;
        }
    };

    2)用两个数组hash和visited来记录每个字符的出现次数和是否出现过。

    class Solution {
    public:
        string removeDuplicateLetters(string s) {
            int n = s.size();
            int hash[26]={0}, visited[26]={0};    //26个英文字符 记住:需要初始化
            for(auto a: s)
                hash[a - 'a'] ++;   //记录每个字符出现的个数
            string res;
            for(int i=0; i<s.size(); i++){
                hash[s[i] - 'a'] --;
    if(visited[s[i] - 'a']) continue; //若当前元素s[i]的字典序比res的最后一个字符小 && res的最后一个字符以后还会出现,即hash[res.back()]>0 && res不为空 while(!res.empty() && hash[res.back()-'a'] && res.back()>s[i]){ visited[res.back()-'a'] = 0; //相应的置为未出现过 res.pop_back(); //从结果中删除最后一个字符 } //否则加入到res中 res += s[i]; visited[s[i]-'a'] = 1; //同时置为出现过 } return res; } };
  • 相关阅读:
    bilibili安卓视频缓存生成mp4
    Java实现kmp算法,少量注释
    小程序MQTT、mqtt超简单的连接、附带Demo
    【STM32H7】第15章 ThreadX GUIX定时器更新功能
    【STM32F429】第15章 ThreadX GUIX定时器更新功能
    【STM32H7】第14章 GUIX Studio设计窗口切换
    【STM32F429】第14章 GUIX Studio设计窗口切换
    【STM32H7】第13章 ThreadX GUIX窗口任意位置绘制2D图形
    【STM32F429】第13章 ThreadX GUIX窗口任意位置绘制2D图形
    【STM32H7】第12章 GUIX Studio生成代码移植到硬件平台
  • 原文地址:https://www.cnblogs.com/Bella2017/p/11339977.html
Copyright © 2020-2023  润新知