Desh

LeetCode316-去除重复字母:双HashMap计数字符串

描述:

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

1 输入:s = "bcabc"
2 输出:"abc"

思路:

1.遍历统计各字符出现个数

2.再次遍历,先判断res中字符出现次数,再进行循环判断当前s[i]是否可以前向替换

复制代码
 1 class Solution {
 2 public:
 3     string removeDuplicateLetters(string s) {
 4         unordered_map<char,int>M;
 5         unordered_map<char,int>N;
 6         for(auto x:s)M[x]++;
 7         string res="";
 8         for(int i=0;i<s.size();i++){
 9             if(N[s[i]]>0){
10                 M[s[i]]--;
11                 continue;
12             }
13             if(res.size()>=1){
14                while(res.size()>0&&M[res[res.size()-1]]!=0&&s[i]<res[res.size()-1]){//前向替换条件
15                 int n=res.size();
16                 N[res[n-1]]--;//注意先更新次数;替换后M[]不变;
17                 res.erase(n-1,1);
18               }
19             }
20             res+=s[i];
21             M[s[i]]--;
22             N[s[i]]++;
23     }
24         return res;
25     }
26 };
复制代码

 

复杂度分析:

时间:O(N)

空间:O(2N)

 

posted on   Desh  阅读(39)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示