Campo de entrenamiento de algoritmo de grabación aleatoria de código Día 15 11 | 20. Paréntesis válidos, 1047. Eliminar todos los duplicados adyacentes en una cadena, 150. Evaluación de expresión en polaco inverso

20. Paréntesis válidos 

Después de hablar de pilas que implementan colas y colas que implementan pilas, el siguiente paso es la aplicación clásica de pilas. 

Esta pregunta es una explicación de las tres situaciones. 

Enlace al tema: Lituo

Idea de código: Primero juzgue la longitud de la cadena. Si la longitud de la cadena es impar, puede saber que obviamente no cumple con el significado de la pregunta. En este momento, devuelva falso directamente; luego recorra la cadena correspondiente y juzgue los tres escenarios.En el caso de corchetes, realice la operación push correspondiente; (2 3 casos) A continuación, busque la pila.top() es diferente a la siguiente, directamente devuelve falso/si la pila está vacía, también devuelve falso . (Caso 1) El último paso es devolver si la pila está vacía.

class Solution {
public:
    bool isValid(string s) {

        //首先要进行判断奇数,如果要是奇数,直接返回false
        if(s.size()%2!=0)
        {
            return false;
        }

        //首先声明一个stack,用来存放对应的括号
        stack<char> panduan;

        for(int i = 0;i<s.size();i++)
        {
            if(s[i]=='(')
            {
                panduan.push(')');
            }
            else if(s[i]=='{')
            {
                panduan.push('}');
            }
            else if(s[i]=='[')
            {
                panduan.push(']');
            }

            else if(  panduan.empty()||s[i] != panduan.top() )//这个地方需要注意
            {
                return false;
            }

           else 
           {
               panduan.pop();
           }
        }
        return panduan.empty();
    }
};

1047. Eliminar todos los duplicados adyacentes en una cadena --- Juego de eliminación de amor

Saber por qué la pila es adecuada para este tipo de operación similar a la eliminación de amor, porque la pila nos ayuda a registrar cuál es el elemento anterior al atravesar el elemento actual de la matriz.

Enlace al tema: Lituo

Por ejemplo, como se muestra a continuación: abbaca, después de eliminar los duplicados es c.

Idea: primero, declare una pila para almacenar cadenas y pregunte si la cola es la misma que la cadena actual. Las mismas palabras realizan una ventana emergente.

class Solution {
public:
    string removeDuplicates(string s) {

        //这道题是比较简单的

        //首先声明一个栈,用来存放相应的字符
        stack<char> cun;

        for(int i = 0;i<s.size();i++)
        {
            if(cun.empty()||cun.top()!=s[i])
            {
                cun.push(s[i]);
            }
            else
            {
                cun.pop();
            }
        }

        string result="";//存放返回值

        while(!cun.empty())//这个地方是不能够使用for进行判断的
        {
            result+=cun.top();
            cun.pop();
        }

        reverse(result.begin(),result.end());

        return result;


    }
};

150. Evaluación de expresión en polaco inverso

Esta pregunta no es difícil, pero si la haces por primera vez, será difícil pensar en ella, así que primero mira el video, entiende la idea antes de hacer la pregunta.

Enlace a este tema: Likou

class Solution {
public:
    int evalRPN(vector<string>& tokens) {

        //首先定义一个栈
        stack<long long> use;

        for(int i = 0;i<tokens.size();i++)
        {
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
            {
                long long k1 = use.top();
                use.pop();
                long long k2 = use.top();
                use.pop();
                if(tokens[i]=="-")
                {
                    use.push(k2-k1);
                }

                if(tokens[i]=="+")
                {
                    use.push(k2+k1);
                }

                if(tokens[i]=="*")
                {
                    use.push(k2*k1);
                }

                if(tokens[i]=="/")
                {
                    use.push(k2/k1);
                }
            }
            else
            {
                use.push(stoll(tokens[i]));//stoll 将string转换为long long类型
            }
        }
        int result = use.top();
        use.pop();

        return result;
    }
};

Supongo que te gusta

Origin blog.csdn.net/m0_47489229/article/details/131006246
Recomendado
Clasificación