Dada uma matriz de caracteres, compacte-a usando o seguinte algoritmo:
As strings compactadas não devem ser retornadas separadamente, mas sim armazenadas na matriz de caracteres de entrada chars. Observe que comprimentos de grupo maiores que 10 serão divididos em vários caracteres em chars.
Depois de modificar a matriz de entrada, retorne o novo comprimento da matriz.
Você deve escrever um algoritmo que use apenas espaço extra constante.
Para resolver este problema, precisamos percorrer o array enquanto controlamos o caractere atual e sua contagem. Quando encontramos um novo caractere, acrescentamos o caractere atual e sua contagem (se for maior que 1) ao array. Precisamos garantir que faremos isso para atender aos requisitos de complexidade do espaço.
A solução de força bruta envolve a criação de um novo array para armazenar a versão compactada do array de entrada. Isso não economiza espaço, mas nos ajuda a entender as etapas envolvidas.
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álise de complexidade de tempo:
A solução de força bruta não economiza espaço e não atende à restrição de usar apenas espaço extra constante.
A solução otimizada envolve a modificação da matriz de entrada para armazenar a versão compactada. Usamos dois ponteiros: um para ler o array de entrada e outro para escrever a saída compactada.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; jAnálise de complexidade de tempo:
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"]
Manipulação de strings:
Algoritmos no local:
Ao praticar esses problemas e estratégias, você pode melhorar suas habilidades de resolução de problemas e estar mais bem preparado para vários desafios de codificação.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3