Table des matières
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~