Application de pile et de file d'attente LeetCode - 32. Les parenthèses valides les plus longues

 Quels problèmes classiques les piles et les files d'attente peuvent-elles résoudre ? Chaque question peut être trouvée sur ma page d'accueil, bienvenue à tout le monde pour faire attention ~~

(1) Problème d'appariement des brackets (pile)

(2) Problème de déduplication de chaînes (pile)

  (3) Problème d'expression polonaise inversée (pile)

  (4) L'élément le plus grand suivant (pile monotone)

(5) Recevoir l'eau de pluie (pile monotone)

(6) Problème maximum de fenêtre glissante (file d'attente monotone) 

(7) Top K éléments avec le plus d'occurrences (file d'attente prioritaire)

(8) File d'attente d'implémentation de la pile

(9) Pile d'implémentation de file d'attente 

1. Solutions 

32. Parenthèses valides les plus longues

Étant donné une chaîne contenant uniquement  '(' et  ')' , trouvez la longueur de la plus longue sous-chaîne entre parenthèses valide (bien formée et consécutive).

 

class Solution {
    public int longestValidParentheses(String s) {
        Deque<Integer> deque=new LinkedList<>();
        int max=0;
        deque.push(-1);//栈底永远是最后一个无法被匹配的括号索引
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='('){
                deque.push(i);
            }else{
                //有匹配的就进行匹配
                if(deque.size()>1){
                    deque.pop();
                    max=Math.max(max,i-deque.peek());
                }else{//没有可以匹配的了,就将栈底索引更新为当前索引
                    deque.pop();
                    deque.push(i);//
                }
            }
        }
        return max;
    }
}

2. Connaissance de base de la pile

La caractéristique la plus notable de la pile est : premier entré dernier sorti

1. Classes d'implémentation courantes des piles en Java :

L'implémentation la plus basique : Stack<Integer> stack=new Stack<>();

Implémentation d'une file d'attente double : Deque<Integer> stack=new LinkedList<>();

2. Méthodes courantes de pile

push(x) -- pousse un élément vers la fin de la file d'attente.
pop() -- supprime un élément de la tête de la file d'attente.
peek() -- renvoie l'élément en tête de la file d'attente.
empty() -- renvoie si la file d'attente est vide.

3. Connaissance de base des files d'attente

La caractéristique la plus notable de la file d'attente est : premier entré, premier sorti

1. Classes d'implémentation courantes des files d'attente en Java :

File d'attente ordinaire : Queue<Integer> queue=new LinkedList<>();

File d'attente double : Deque<Integer> queue=new LinkedList<>();

File d'attente prioritaire : PriorityQueue<Integer> queue=new PriorityQueue<>();

2. Méthodes courantes de files d'attente

add Ajoute un élément Si la file est pleine, lance une exception IIIegaISlabEepeplian
remove Supprime et retourne l'élément en tête de file Si la file est vide, lance un
élément NoSuchElementException Renvoie l'élément en tête de file Si la file est vide , puis lance une NoSuchElementException

size Le nombre d'éléments
proposés Ajouter un élément et retourner vrai Si la file est pleine, retourner faux
poll Supprimer et retourner l'élément en tête de file Si la file est vide, retourner null
peek Retourner l'élément en tête de file Si la file d'attente est vide, retourne null


put ajoute un élément, bloque si la file est pleine
take supprime et renvoie l'élément en tête de file, bloque si la file est vide

Je suppose que tu aimes

Origine blog.csdn.net/w20001118/article/details/127308744
conseillé
Classement