leetcode1750: la longitud más corta después de eliminar los mismos caracteres en ambos extremos de la cadena (12.28 pregunta diaria)

Declaración del tema:

Dada una cadena que contiene solo los caracteres   ,  'a'y 'b' ,   puede hacer lo siguiente (5 pasos) cualquier número de veces:'c's

  1. Selecciona  s un  prefijo no vacío  de cadenas donde todos los caracteres del prefijo son idénticos.
  2. Selecciona una cadena  con s un  sufijo no vacío  donde todos los caracteres son iguales.
  3. Los prefijos y los sufijos no pueden cruzarse en ninguna parte de la cadena.
  4. El prefijo y el sufijo deben contener todos los mismos caracteres.
  5. Se eliminan tanto el prefijo como el sufijo.

Devuelva  la longitud más cortas  que se pueda obtener después de realizar las operaciones anteriores en la cadena cualquier número de veces (posiblemente 0 veces)   .

Ejemplo 1:

Entrada: s = "ca"
 Salida: 2
 Explicación: No puede eliminar ningún carácter, por lo que la longitud de la cadena sigue siendo la misma.

Ejemplo 2:

Entrada: s = "cabaabac"
 Salida: 0
 Explicación: La secuencia óptima de operaciones es: 
- Seleccionar el prefijo "c" y el sufijo "c" y borrarlos, resultando en s = "abaaba". 
- Selecciona el prefijo "a" y el sufijo "a" y bórralos, resultando s = "baab". 
- Seleccione el prefijo "b" y el sufijo "b" y elimínelos, lo que da como resultado s = "aa". 
- Seleccione el prefijo "a" y el sufijo "a" y elimínelos, resultando en s = "".

Ejemplo 3:

Entrada: s = "aabccabba"
 Salida: 3
 Explicación: La secuencia óptima de operaciones es: 
- Seleccionar el prefijo "aa" y el sufijo "a" y borrarlos, resultando en s = "bccabb". 
- Selecciona el prefijo "b" y el sufijo "bb" y bórralos, resultando s = "cca".

pista:

  • 1 <= s.length <= 100000
  • s Contiene solo caracteres  'a', 'b' y  'c' .

Ideas para resolver problemas:

        La condición del ciclo while es que el último carácter de la cadena s sea el mismo que el primer carácter.

        La declaración condicional en while es para buscar y eliminar los caracteres con el mismo prefijo y el mismo sufijo.

        Si la longitud de los s restantes es igual a 1, devuelve 1 directamente;

        Si el primer y el último carácter de la cadena son diferentes, devuelve la longitud de la cadena s.

Código de resolución de problemas (99/100, el último caso falló):

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();
    }
};

Código de resolución de problemas:

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;
    }
};

Supongo que te gusta

Origin blog.csdn.net/m0_63743577/article/details/128472696
Recomendado
Clasificación