给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入: "bcabc"
输出: "abc"
示例 2:
输入: "cbacdcbc"
输出: "acdb"
来源:力扣(LeetCode)
https://leetcode-cn.com/problems/remove-duplicate-letters/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
string removeDuplicateLetters(string str)
{
string res = " ";
vector<int> cnt(256, 0);
vector<bool> in_right_place(256, false);
for (string::size_type ix = 0; ix != str.size(); ++ix)
{
cnt[str[ix]]++;
}
for (string::size_type ix = 0; ix != str.size(); ++ix)
{
cnt[str[ix]]--;
if (in_right_place[str[ix]])
{
continue;
}
else
{
while (cnt[res.back()] > 0 && (str[ix] < res.back()))
{
//cnt[str[ix]]--;
in_right_place[res.back()] = false;
res.pop_back();
}
res += str[ix];
in_right_place[str[ix]] = true;
}
}
return res;
}
int main()
{
string str;
string str1;
cin >> str;
//cout << endl;
str1 = removeDuplicateLetters(str);
cout << str1 << endl;
return 0;
}