(自己开发的博客,欢迎访问)https://www.weiboke.online
316. Remove Duplicate Letters
Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.
Example 1:
Input: “bcabc”
Output: “abc”
Example 2:
Input: “cbacdcbc”
Output: “acdb”
Approach
题目大意是要去掉重复字符,保证每个字符只出现一次,并且保证最后的字符串的字典序最小。
最后看讨论区,看到一个不错的思路,用贪心的思想,每次保证在一定范围里(字符都有重复)找到最小的字符,直到某个字符次数不足一次的时候,然后递归剩余字符。
Code
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> cnt(26, 0);
for (auto c:s) {
cnt[c - 'a']++;
}
int pos = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] < s[pos])pos = i;
if (!(--cnt[s[i] - '0']))break;
}
if (s.empty())return "";
string buffer = s.substr(pos + 1);
buffer.erase(remove(buffer.begin(), buffer.end(), s[pos]), buffer.end());
return s[pos] + removeDuplicateLetters(buffer);
}
};
本文探讨了如何从仅包含小写字母的字符串中移除重复字母,确保每个字母只出现一次,同时保持结果字符串的字典序最小。通过一个贪心算法策略,每次在有重复字符的范围内找到最小的字符,直至所有字符都处理完毕。

1252

被折叠的 条评论
为什么被折叠?



