Leecode32 más largas-valid-paréntesis

título Descripción

Que sólo contiene una cadena de caracteres dada '(' y ''), y calcula la longitud de la subcadena más larga formato es paréntesis correctos.
Para cadena de caracteres "(()", la subcadena más larga tiene el formato correcto "()", una longitud de 2.
Otro ejemplo: para la cadena ") () ())", la mayor parte formato correcto es larga subcadena "() ()", una longitud de 4.

análisis

  • Utiliza la pila '(' entrada de caracteres subíndice atravesado. Encuentros '(' pila encuentro '') de la pila.
  • Antiguos soportes legales secuencias punto más a la izquierda al examen actual de un índice.
  • Atravesando los caracteres de entrada, el índice subíndice, se encontró '(' pila cuando:
    • La pila subíndice.
  • Atravesando carácter de entrada, el índice subíndice, la cara '') cuando la pila:
    • Si la pila está vacía, y entonces no hay coincidencia (, más a la izquierda = índice, para comprobar el siguiente conjunto de paréntesis muestran.
    • Si la pila no está vacía, entonces el partido. La pila.
      • Si la parte superior de la pila no está vacía en este momento, los soportes legales vigentes rango de índice - peek, máxima actualizada.
      • Si la pila está vacía en este momento, los soportes legales vigentes rango de índice - más a la izquierda, actualice el máximo.

el código de java

import java.util.*;

public class Solution {
    public int longestValidParentheses(String s) {
        if(s == null || s.length() <= 1){return 0;}
        
        char arr [] = s.toCharArray();
        int max = 0;
        int index = 0;
        int leftmost = -1;
        
        //装放下标
        Stack <Integer> stack = new Stack<>();
        for(; index < arr.length; index++){
            if(arr[index] == '('){
                stack.push(index);
            }else{
                // ) 情况
                if(!stack.isEmpty()){
                    //出栈
                    int temp = stack.pop();
                    if(!stack.isEmpty()){
                        max = Math.max(index - stack.peek(),max);
                    }else{
                        max = Math.max(index - leftmost,max);
                    }
                }else{
                    leftmost = index;
                }
            }
        }
        
        return max;
    }
}
Publicado 22 artículos originales · ganado elogios 0 · Vistas 198

Supongo que te gusta

Origin blog.csdn.net/weixin_40300702/article/details/104917713
Recomendado
Clasificación