[Percée du sujet de l'algorithme] Pointeurs doubles - la sous-chaîne la plus longue sans caractères répétés (10)

Table des matières

1. Analyse des questions

2. Principe de l'algorithme

3. Écriture de codes

Écrivez à la fin :


1. Analyse des questions

Lien vers la question : 3. La sous-chaîne la plus longue sans caractères répétés - Leetcode

 Cette question n'est pas difficile à comprendre : il s'agit de trouver la sous-chaîne la plus longue sans caractères répétés.

Enfin, renvoie la longueur de la sous-chaîne la plus longue.

2. Principe de l'algorithme

La première chose qui vient à l’esprit est bien sûr la solution par force brute : on se contente d’énumérer toutes les sous-chaînes qui correspondent à la situation 0.

Mais il doit y avoir des moyens de l'optimiser. La plupart du temps, l'utilisation de la force brute expirera, ce qui n'est pas intéressant. Voyons comment optimiser :

 Nous pouvons utiliser des fenêtres coulissantes pour optimiser les solutions par force brute :

Définissez d'abord deux pointeurs pour placer les caractères dans la table de hachage. Si des caractères répétés apparaissent, une fenêtre apparaîtra jusqu'à ce qu'il n'y ait plus de caractères répétés.

Ensuite, nous continuons à saisir les caractères dans la table de hachage, enregistrons la longueur maximale de la sous-chaîne et enfin retournons :

3. Écriture de codes

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = 0;
        unordered_set<char> win;
        for(int left = 0, right = 0; right < s.size(); right++) {
            while(win.find(s[right]) != win.end()) {
                win.erase(s[left]);
                left++;
            }
            len = max(len, right - left + 1);
            win.insert(s[right]);
        }
        return len;
    }
};

Écrivez à la fin :

C’est le contenu de cet article, merci d’avoir lu.

Si vous sentez que vous avez gagné quelque chose, vous pouvez liker le blogueur .

S'il y a des omissions ou des erreurs dans le contenu de l'article, veuillez envoyer un message privé au blogueur ou le signaler dans la zone de commentaire~

Je suppose que tu aimes

Origine blog.csdn.net/Locky136/article/details/131676357
conseillé
Classement