É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
- Sélectionne
s
un préfixe non vide de chaînes où tous les caractères du préfixe sont identiques. - Sélectionne une chaîne avec
s
un suffixe non vide où tous les caractères sont identiques. - Les préfixes et les suffixes ne peuvent pas se croiser n'importe où dans la chaîne.
- Le préfixe et le suffixe doivent contenir tous les mêmes caractères.
- 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;
}
};