【Pregunta diaria】 844. Comparación de cadenas de retroceso

Inserte la descripción de la imagen aquí

El significado del título, el signo # es equivalente al carácter de eliminación. Cuando aparece un #, el carácter anterior debe eliminarse. Si hay n signos # consecutivos, se eliminarán los n caracteres antes del primer #. Si no hay más caracteres delante de #, no se eliminará.

De manera intuitiva, recorra de atrás hacia adelante y elimine los caracteres antes del signo # cuando se encuentre con el signo #. Por supuesto que aquí hay algunos detalles.

  • Cuando hay varios signos # consecutivos, en lugar de eliminar directamente los caracteres delante de los signos #, debe registrar el número de signos #, que se registra como num.
  • Cuando el carácter actual es #, num ++, y cuando el carácter actual no es #, juzgue si num es mayor que 0. Si es mayor que 0, significa que # ha aparecido antes, luego borre el carácter actual y haga num–
  • No es posible eliminar cadenas directamente en Python, primero convierta la cadena en una lista antes de realizar la operación de eliminación
# 遍历了两次,效率有点拉跨
class Solution:
    def convert(self, string):
        s = list(string)         #转成list
        pos = len(s) - 1
        num = 0
        while (pos >= 0):  #从后往前遍历
            if (s[pos] != '#' and num > 0):
                num -= 1
                del s[pos] 		#删除当前字符
            elif (s[pos] == '#'):
                del s[pos]
                num += 1
            pos -= 1
        return s
                    
    def backspaceCompare(self, S: str, T: str) -> bool:
        s = self.convert(S)
        t = self.convert(T)
        if(len(s) != len(t)):
            return False
        else:
            for i in range(0, len(s)):
                if(s[i] != t[i]):
                    return False
            return True

La anterior es la primera versión del código. Descubrimos que durante la operación de eliminación, las cadenas S y T se atravesaron una vez, y luego, cuando se compararon las cadenas eliminadas para ver si eran iguales, se realizó el recorrido nuevamente, por lo que se realizaron un total de dos recorridos. La complejidad del tiempo está un poco estirada.

Para escribir la función en la clase python, debe escribir el parámetro seft y usar self.function al llamar, lo cual siempre es fácil de olvidar

Supongo que te gusta

Origin blog.csdn.net/SJTUKK/article/details/109156060
Recomendado
Clasificación