Leetcode 316 去除重复字母
- 尽可能确保字符串重的字符单调递增。
- 确保字符串没有重复字符
使用栈结构:
不完全是单调栈。
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> visited(26), nums(26);
for(char ss : s){
nums[ss - 'a']++;
}
string res;
for(char ss : s){
if(visited[ss - 'a'] == 0){
while(!res.empty() && res.back()>ss){
if(nums[res.back()-'a'] > 0){
visited[res.back() - 'a'] = 0;
res.pop_back();
}else{
break;
}
}
visited[ss-'a'] =1;
res.push_back(ss);
}
nums[ss - 'a'] -= 1;
}
return res;
}
};