力扣2434(贪心+栈)

力扣2434(贪心+栈)_第1张图片

题意:给定一个字符串s,每次可以选择将第一个字符放进字符串t尾部,或者将字符串t尾部写进纸上,要求纸上字符串字典序最小

其实就是在模拟栈的先进后出的过程,定义一个栈,每当一个字符入栈时,判断该字符(即栈顶元素)是否为剩余字符串中最小的字符:

①不是则继续元素入栈

②是则pop出来,塞入ans字符串

为了判断是否最小字符,则需要预处理一个f[n]数组,f[i]表示i到n-1字典最小的字符

class Solution {
public:
    string robotWithString(string s) {
        int n = s.size();
        vector f(n + 1);
        f[n] = 'z' + 1;
        for (int i = n - 1; i >= 0; i--) {
            f[i] = min(f[i + 1], s[i]);//f[i]表示i到n-1字典最小的字符
        }


        string ans;
        stack stk;
        for (int i = 0; i < n; i++) {
            stk.push(s[i]);
            while (!stk.empty() && stk.top() <= f[i + 1]){
                ans.push_back(stk.top());
                stk.pop();
            }
        }
        return ans;
    }
};

 

你可能感兴趣的:(力扣,leetcode,算法,贪心算法)