[Likou] Le 354ème jeu hebdomadaire (la longueur de la plus longue sous-chaîne légale)

Sujet : 6924. La longueur de la plus longue sous-chaîne légale

Vous recevez un mot de chaîne et un tableau de chaînes interdites.

Si une chaîne ne contient aucune chaîne interdite, nous disons que cette chaîne est légale.

Veuillez renvoyer la longueur de la sous-chaîne légale la plus longue du mot chaîne.

Une sous-chaîne fait référence à une période continue de caractères dans une chaîne, qui peut être vide.

Exemple 1:

Entrée : mot = "cbaaaabc", interdit = ["aaa", "cb"]
Sortie : 4
Explication : Il existe un total de 9 sous-chaînes légales : "c", "b", "a", "ba", " aa", "bc" , "baa" , "aab" et "aabc" . La longueur de la sous-chaîne légale la plus longue est 4.
Toutes les autres sous-chaînes contiennent soit « aaa » soit « cb ».

Exemple 2 :

Entrée : word = "leetcode", interdit = ["de", "le", "e"]
Sortie : 4
Explication : Il y a 11 sous-chaînes légales au total : "l", "t", "c", " o " , "d" , "tc" , "co" , "od" , "tco" , "cod" et "tcod" . La longueur de la sous-chaîne légale la plus longue est 4.
Toutes les autres sous-chaînes contiennent au moins l'un des éléments "de", "le" et "e".

indice:

1 <= word.length <= 1e5
mot ne contient que des lettres anglaises minuscules.
1 <= interdit.longueur <= 1e5
1 <= interdit[i].longueur <= 10
interdit[i] ne contient que des lettres anglaises minuscules.

Idée : table de hachage + double pointeur

Initialisez l’extrémité gauche de la sous-chaîne l=0 et énumérez l’extrémité droite de la sous-chaîne r.

Par exemple 2, tant que r ≥ 1, la sous-chaîne légale ne peut pas contenir le, donc l'extrémité gauche l doit se déplacer vers la droite et ne peut pas revenir à 0 (sinon elle contiendra le). Étant donné que l’extrémité gauche se déplacera uniquement vers la droite et non vers la gauche, cette monotonie garantit l’efficacité de l’algorithme.

Lorsque r se déplace vers la droite vers une nouvelle lettre, énumérez la longueur la plus courte de interdit[i] avec la lettre comme point final droit. S'il s'avère que les sous-chaînes word[i] à word[right] sont interdites (implémentées avec une table de hachage), alors mettez à jour l =i+1 et terminez l'énumération, empêchant ainsi les sous-chaînes légales de contenir des chaînes interdites. Une fois l'énumération terminée, la réponse est mise à jour à la valeur maximale de la longueur légale de la sous-chaîne r −l +1.

Code CA :

class Solution {
public:
    int longestValidSubstring(string word, vector<string>& forbidden) 
    {
        unordered_set<string> s(forbidden.begin(),forbidden.end());
        int n=word.size();
        int l=0,ans=0;
        for(int r=0;r<n;r++)
        {
            for(int i=r;i>=l&&i>r-10;i--)
            {
                if(s.count(word.substr(i,r-i+1)))
                {
                    l=i+1;
                    break;
                }
            }
            ans=max(ans,r-l+1);
        }
        return ans;
    }
};

Article suivant Barrière optimale (pile)

Je suppose que tu aimes

Origine blog.csdn.net/weixin_74088105/article/details/131753089
conseillé
Classement