前言:这个题目一开始我没想通的就是如果s当前的一个字符或者之后的一个字符和当前t的尾巴是一样的,那么优先选哪一个,其实这个就要优先选t的
class Solution {
public:
string robotWithString(string s) {
string ans;
int cnt[26]{}, min = 0; // min 表示剩余最小字母
for (char c : s) ++cnt[c - 'a'];
stack<char> st;
for (char c : s) {
--cnt[c - 'a'];
while (min < 25 && cnt[min] == 0) ++min;
st.push(c);
while (!st.empty() && st.top() - 'a' <= min) {
ans += st.top();
st.pop();
}
}
return ans;
}
};
学一下别人的思路,自己写的代码太长了