leetcode1750 : la longueur la plus courte après la suppression des mêmes caractères aux deux extrémités de la chaîne (question quotidienne de 12,28)

Énoncé de sujet :

Étant donné une chaîne contenant uniquement les caractères   ,  'a'et 'b' ,   vous pouvez effectuer les étapes suivantes (5 étapes) autant de fois que vous le souhaitez :'c's

  1. Sélectionne  s un  préfixe non vide  de chaînes où tous les caractères du préfixe sont identiques.
  2. Sélectionne une chaîne  avec s un  suffixe non vide  où tous les caractères sont identiques.
  3. Les préfixes et les suffixes ne peuvent pas se croiser n'importe où dans la chaîne.
  4. Le préfixe et le suffixe doivent contenir tous les mêmes caractères.
  5. Le préfixe et le suffixe sont supprimés.

Veuillez renvoyer  la longueur la plus courtes  pouvant être obtenue après avoir effectué les opérations ci-dessus sur la chaîne un certain nombre de fois (éventuellement 0 fois)   .

Exemple 1:

Entrée : s = "ca"
 Sortie : 2
 Explication : Vous ne pouvez supprimer aucun caractère, la longueur de la chaîne reste donc la même.

Exemple 2 :

Entrée : s = « cabaabac »
 Sortie : 0
 Explication : La séquence optimale des opérations est la suivante : 
- Sélectionnez le préfixe « c » et le suffixe « c » et supprimez-les, ce qui donne s = « abaaba ». 
- Sélectionnez le préfixe "a" et le suffixe "a" et supprimez-les, ce qui donne s = "baab". 
- Sélectionnez le préfixe "b" et le suffixe "b" et supprimez-les, ce qui donne s = "aa". 
- Sélectionnez le préfixe "a" et le suffixe "a" et supprimez-les, ce qui donne s = "".

Exemple 3 :

Entrée : s = "aabccabba"
 Sortie : 3
 Explication : La séquence optimale d'opérations est la suivante : 
- Sélectionnez le préfixe "aa" et le suffixe "a" et supprimez-les, ce qui donne s = "bccabb". 
- Sélectionnez le préfixe "b" et le suffixe "bb" et supprimez-les, ce qui donne s = "cca".

indice:

  • 1 <= s.length <= 100000
  • s Contient uniquement les caractères  'a', 'b' et  'c' .

Idées de résolution de problèmes :

        La condition de la boucle while est que le dernier caractère de la chaîne s est le même que le premier caractère.

        L'instruction conditionnelle dans while consiste à rechercher et supprimer les caractères avec le même préfixe et le même suffixe.

        Si la longueur des s restants est égale à 1, renvoie 1 directement ;

        Si les premier et dernier caractères de la chaîne sont différents, renvoie la longueur de la chaîne s.

Code de résolution de problèmes (99/100, le dernier cas a échoué) :

class Solution {
public:
    int minimumLength(string s) {  //最后一个用例通过不了
        while(s[0]==s[s.length()-1])
        {
            if(s.length()==1)
            return 1;
            int start=0;
            int end=s.length()-1;
            while(start<s.length()&&s[start]==s[0])
            {
                start++;
            }
            while(end>=0&&s[end]==s[s.length()-1])
            {
                end--;
            }
            if(end<start)
            {
                return 0;
            }
            else
            {
                s=s.substr(start);
                s=s.substr(0,end-start+1);
            }
        }
        return s.length();
    }
};

Code de résolution de problèmes :

class Solution {   //官方题解
public:
    int minimumLength(string s) {
        int n = s.size();
        int left = 0, right = n - 1;
        while (left < right && s[left] == s[right]) {
            char c = s[left];
            while (left <= right && s[left] == c) {
                left++;
            }
            while (left <= right && s[right] == c) {
                right--;
            }
        }
        return right - left + 1;
    }
};

Je suppose que tu aimes

Origine blog.csdn.net/m0_63743577/article/details/128472696
conseillé
Classement