"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Crônicas de codificação datilografadas: palavras reversas em uma string

Crônicas de codificação datilografadas: palavras reversas em uma string

Publicado em 2024-08-02
Navegar:646

Typescript Coding Chronicles: Reverse Words in a String

Declaração do problema:

Dada uma string de entrada s, inverta a ordem das palavras. Uma palavra é definida como uma sequência de caracteres sem espaço. As palavras em s serão separadas por pelo menos um espaço. Retorna uma sequência de palavras em ordem inversa concatenada por um único espaço.

Observe que s pode conter espaços iniciais ou finais ou vários espaços entre duas palavras. A string retornada deve ter apenas um espaço separando as palavras. Não inclua espaços extras.

Exemplo 1:

  • Entrada: s = "o céu é azul"
  • Saída: "azul é o céu"

Exemplo 2:

  • Entrada: s = "olá mundo"
  • Saída: "olá mundo"
  • Explicação: sua string invertida não deve conter espaços iniciais ou finais.

Exemplo 3:

  • Entrada: s = "um bom exemplo"
  • Saída: "exemplo bom a"
  • Explicação: você precisa reduzir vários espaços entre duas palavras para um único espaço na string invertida.

Restrições:

  • 1
  • s contém letras inglesas (maiúsculas e minúsculas), dígitos e espaços ' '.
  • Há pelo menos uma palavra em s.

Processo de pensamento inicial:

Para resolver este problema, precisamos:

  1. Divida a string em palavras.
  2. Inverta a ordem das palavras.
  3. Junte as palavras novamente com um único espaço entre cada uma.

Solução Básica:

Código:

function reverseWordsBruteForce(s: string): string {
    // Split the string by spaces and filter out empty strings
    let words = s.trim().split(/\s /);

    // Reverse the array of words
    words.reverse();

    // Join the words with a single space
    return words.join(' ');
}

Análise de complexidade de tempo:

  • Complexidade de tempo: O(n), onde n é o comprimento da string. Dividir, reverter e juntar tudo leva tempo linear.
  • Complexidade espacial: O(n), onde n é o comprimento da string. Armazenamos as palavras em um array e o resultado final em uma string.

Limitações:

Esta solução é eficiente dadas as restrições. No entanto, ele usa espaço adicional para a matriz de palavras.

Solução otimizada:

Se o tipo de dados string for mutável e precisarmos resolvê-lo no local com espaço extra O(1), podemos usar uma técnica de dois ponteiros para reverter as palavras dentro da string original.

Código:

function reverseWordsOptimized(s: string): string {
    // Trim the string and convert it to an array of characters
    let chars = s.trim().split('');

    // Helper function to reverse a portion of the array in place
    function reverse(arr: string[], left: number, right: number) {
        while (left 



Análise de complexidade de tempo:

  • Complexidade de tempo: O(n), onde n é o comprimento da string. Cada caractere é processado um número constante de vezes.
  • Complexidade do espaço: O(1), pois estamos modificando o array no local e usando apenas uma quantidade constante de espaço extra.

Melhorias em relação à solução básica:

  • A solução otimizada reduz a complexidade do espaço executando operações no local na matriz de caracteres.

Casos extremos e testes:

Casos extremos:

  1. A string contém espaços iniciais e finais.
  2. A string contém vários espaços entre as palavras.
  3. A string contém apenas uma palavra.
  4. O comprimento da string está no limite mínimo ou máximo.

Casos de teste:

console.log(reverseWordsBruteForce("the sky is blue")); // "blue is sky the"
console.log(reverseWordsBruteForce("  hello world  ")); // "world hello"
console.log(reverseWordsBruteForce("a good   example")); // "example good a"
console.log(reverseWordsBruteForce("singleWord")); // "singleWord"
console.log(reverseWordsBruteForce("   ")); // ""

console.log(reverseWordsOptimized("the sky is blue")); // "blue is sky the"
console.log(reverseWordsOptimized("  hello world  ")); // "world hello"
console.log(reverseWordsOptimized("a good   example")); // "example good a"
console.log(reverseWordsOptimized("singleWord")); // "singleWord"
console.log(reverseWordsOptimized("   ")); // ""

Estratégias gerais de resolução de problemas:

  1. Entenda o problema: Leia atentamente a declaração do problema para entender os requisitos e restrições.
  2. Identificar operações principais: Determine as operações principais necessárias, como dividir, inverter e unir palavras.
  3. Otimizar para legibilidade: Use uma lógica clara e concisa para garantir que o código seja fácil de seguir.
  4. Teste Completamente: Teste a solução com vários casos, incluindo casos extremos, para garantir a correção.

Identificando problemas semelhantes:

  1. Manipulação de strings:

    • Problemas em que você precisa modificar strings com base em condições específicas.
    • Exemplo: inverter a ordem dos caracteres em cada palavra de uma frase.
  2. Técnica de dois ponteiros:

    • Problemas em que o uso de dois ponteiros pode ajudar a otimizar a solução.
    • Exemplo: Removendo duplicatas de uma matriz classificada.
  3. Algoritmos no local:

    • Problemas em que as operações precisam ser realizadas em local com espaço extra limitado.
    • Exemplo: girando uma matriz para a direita em k etapas.

Conclusão:

  • O problema de inverter palavras em uma string pode ser resolvido de forma eficiente usando uma abordagem de força bruta e uma abordagem otimizada no local.
  • Compreender o problema e dividi-lo em partes gerenciáveis ​​é crucial.
  • Usar uma lógica clara e otimizar a legibilidade garante que a solução seja fácil de seguir.
  • Testes com vários casos extremos garantem robustez.
  • Reconhecer padrões em problemas pode ajudar a aplicar soluções semelhantes a outros desafios.

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.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/__zamora__/typescript-coding-chronicles-reverse-words-in-a-string-44no?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

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