Dada una matriz de caracteres, comprímala usando el siguiente algoritmo:
La cadena comprimida s no debe devolverse por separado, sino que debe almacenarse en los caracteres de la matriz de caracteres de entrada. Tenga en cuenta que las longitudes de grupo de 10 o más se dividirán en varios caracteres en caracteres.
Una vez que haya terminado de modificar la matriz de entrada, devuelva la nueva longitud de la matriz.
Debes escribir un algoritmo que utilice solo espacio adicional constante.
Para resolver este problema, necesitamos iterar a través de la matriz mientras realizamos un seguimiento del carácter actual y su recuento. Cuando encontramos un nuevo carácter, agregamos el carácter actual y su recuento (si es mayor que 1) a la matriz. Necesitamos asegurarnos de hacer esto en el lugar para cumplir con el requisito de complejidad del espacio.
La solución de fuerza bruta implica la creación de una nueva matriz para almacenar la versión comprimida de la matriz de entrada. Esto no ahorra espacio, pero nos ayuda a comprender los pasos necesarios.
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; jAnálisis de complejidad temporal:
La solución de fuerza bruta no ahorra espacio y no cumple con la restricción de utilizar solo espacio adicional constante.
La solución optimizada implica modificar la matriz de entrada existente para almacenar la versión comprimida. Usamos dos punteros: uno para leer la matriz de entrada y otro para escribir la salida comprimida.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; jAnálisis de complejidad temporal:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
Manipulación de cadenas:
Algoritmos locales:
Al practicar estos problemas y estrategias, puedes mejorar tus habilidades de resolución de problemas y estar mejor preparado para diversos desafíos de codificación.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3