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
- Selecciona
s
un prefijo no vacío de cadenas donde todos los caracteres del prefijo son idénticos. - Selecciona una cadena con
s
un sufijo no vacío donde todos los caracteres son iguales. - Los prefijos y los sufijos no pueden cruzarse en ninguna parte de la cadena.
- El prefijo y el sufijo deben contener todos los mismos caracteres.
- 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;
}
};