Eu enviei a ferramenta de reverso de strings no Toolz.dev pensando que era a coisa mais chata que eu construiria durante todo o mês. split('').reverse().join(''). O que poderia possivelmente dar errado Então EU colei o texto de amostra I & #39; d escrito - que, porque EU estava me sentindo fofo, terminou com & quot;Unicode: 你好世界 ." - e a saída voltou com os dois emoji transformados em caixas distorcidas. 🌍🚀 tornou-se \ude80🜍\ud83c. Os caracteres chineses inverteram perfeitamente. O emoji se quebrou.
Essa surpresa de cinco minutos é na verdade a coisa mais útil que posso ensinar sobre a inversão de strings, então todo esse guia é construído em torno dele A reversão do texto soa trivial, e para ASCII simples é O momento em que você introduz emoji, sinalizadores ou certos caracteres acentuados, & quot; reverta a string" deixa de ter uma resposta óbvia - e a maioria das ferramentas, incluindo esta, escolhe silenciosamente a resposta que os quebra.
o corda reversa A ferramenta faz uma coisa: ela inverte os caracteres, instantaneamente, enquanto você digita. Nenhum modo para configurar, nenhuma inscrição e seu texto nunca sai do navegador. Deixe-me mostrar exatamente o que ele faz, onde ele quebra e como reverter o texto corretamente Em código real quando a quebra não é aceitável.
tl;dr: Cole o texto em corda reversa e inverte a ordem dos personagens ao vivo -
Hellotorna-seolleH. É um modo de reversão de um único personagem (sem modos separados de palavras ou linhas), ele é atualizado automaticamente à medida que você digita e você pode copiar ou baixar o resultado. É perfeito para verificações de palíndro, quebra-cabeças rápidos e verificações de respostas das entrevistas. Atenção: como um JavaScript simplessplit(''), ele quebra emojis e sinalizadores porque se divide por unidade de código. Texto simples e CJK reverte bem. Emparelhe-o com o conversor de caixa ou contador de palavras para trabalho de texto rápido.
O que a ferramenta de reverso de strings realmente faz?
Exatamente uma operação: ele inverte a ordem dos personagens. O último personagem se torna o primeiro, e assim por diante.
Entrada: Hello World
Saída: dlroW olleH
Sob o capô a lógica é genuinamente uma linha - a mesma linha você'd escrever em uma entrevista JavaScript:
text.split('').reverse().join('')
Não há "palavras reversas" ou "modo de reverso" ocultado em um menu. Os rascunhos anteriores desta página descreviam os modos de caracteres, palavras, frases e linhas; isso era aspiracional, não real. A ferramenta inverte os caracteres, ponto final. Ele é atualizado automaticamente à medida que você digita, então você vê o resultado invertido ao vivo, e fornece a contagem de caracteres e linhas de entrada e saída. Você pode colar texto, fazer upload de um arquivo de texto, carregar de um URL e copiar o resultado ou fazer o download como um .txt.
Se você deseja especificamente reversão de ordem de palavras (Hello World → World Hello), você faria isso em código com split(' ').reverse().join(' ')- I'mostrará os trechos abaixo.
Por que os emojis quebram quando você os reverte?
Esta é a parte que vale a pena entender, porque explica toda uma classe de bugs.
As strings JavaScript são sequências de UTF-16 Unidades de código, não o & quot; characters" no sentido humano A maioria dos caracteres do dia-a-dia - letras, dígitos, pontuação em inglês e até caracteres chineses, japoneses e coreanos - cabem numa única unidade de código de 16 bits. Então split('') Cortes entre eles de forma limpa e invertida funciona:
'你好世界'.split('').reverse().join('') // → '界世好你' ✅
Mas emoji, sequências de bandeiras e alguns símbolos ao vivo fora que variam e são armazenados como pares substitutos- duas unidades de código que significam apenas algo juntas. split('') Felizmente, corta-os pela metade e, invertendo, embaralha as metades em um absurdo:
'AB🌍🚀'.split('').reverse().join('') // → mojibake, the emoji shatter ❌
Combinando marcas são a outra armadilha. Uma letra acentuada pode ser armazenada de duas maneiras: como um ponto de código pré-composto (é), ou como uma letra básica mais um acento de combinação separado (e + ◌́). A versão pré-composta reverte bem. A versão decomposta desprende o acento, que flutua e cai na letra errada após a reversão.
Portanto, a regra honesta para esta ferramenta: Texto simples, dígitos, pontuação e CJK revertem corretamente; emoji, emoji de bandeira e acentos decompostos irão quebrar. Isso' não é um defeito exclusivo de Toolz.dev - it's o que split('') O que faz em todos os lugares e muitos sites "string reversa" se comportam de forma idêntica. Deixei a versão ingênua deliberadamente porque é rápida, transparente e combina com o que a maioria das pessoas quer dizer quando diz "reverter isso", mas você merece saber o que é possível.
Como você inverte uma string corretamente no código?
Se você está escrevendo códigos reais e assuntos unicode, aqui está a escada de ingênuo para corrigir.
Nível 1 - ingênuo (o que a ferramenta faz): Quebra emoji.
str.split('').reverse().join('')
Nível 2 - operador de spread: Itera por código salientar, então mantém a maioria dos emojis intactos (os substitutos permanecem juntos). Ainda quebra, combinando marcas e sequências de vários emojis, como sinalizadores.
[...str].reverse().join('')
Nível 3 - ciente do grafema: Trate cada personagem "percebido pelo usuário" como atômico. Esta é a abordagem genuinamente correta.
const seg = new Intl.Segmenter('en', { granularity: 'grapheme' });
[...seg.segment(str)].map(s => s.segment).reverse().join('');
Intl.Segmenter Lida com emoji, sinalizadores, modificadores de tom de pele e combinando marcas adequadamente. É a versão que eu enviaria em produção se reverter o texto do usuário com emoji fosse um requisito real.
Aqui está a mesma operação em todos os idiomas, para a prática e referências da entrevista:
# Python — [::-1] works by code point, similar to JS spread
reversed_str = original[::-1]
words_reversed = ' '.join(original.split()[::-1])
// Java — StringBuilder.reverse() is code-unit based (same emoji caveat)
String reversed = new StringBuilder(original).reverse().toString();
// Go — []rune iterates by code point, safer than byte reversal
runes := []rune(original)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
reversed := string(runes)
// PHP — strrev() is byte-based and mangles any multi-byte UTF-8
$reversed = strrev($original); // breaks UTF-8
Observe o padrão: quase todas as linguagens "obvias" são reversas de código ou de códigos e compartilham a mesma fraqueza de Unicode. Alcançar a opção com reconhecimento de grafema é a exceção, não o padrão.
Para que serve a reversão de strings?
Além de ser o aquecimento da entrevista canônica, ele ganha seu dinheiro em alguns lugares.
Verificações do palíndromo. Reverter a corda e comparar com o original - se eles coincidem, ele' s um palíndromo. Tentar racecar, level, ou 12321 Na ferramenta e observe a saída idêntica. Para palíndromos de frases como "A Man A Man A Plan a Canal Panama" e o estojo de tiras primeiro.
Verificando seu próprio código. Quando você estiver com problemas de reversão no estilo Leetcode, cole sua saída esperada na ferramenta para verificar a sanidade em um segundo. É um oráculo rápido para o caso de reversão de personagem.
Quebra-cabeças rápidos e textos divertidos. Mensagens invertidas, jogos de palavras, postagens sociais espelhadas - apostas baixas e reversão são inversas, então reverter duas vezes dá o verso original. Essa propriedade é útil para testes: reverter, reverter novamente, confirmar você e #39; está em casa.
uma coisa para não use - a para: segurança A reversão é um truque de festa, não a encriptação - it' s desfaz trivialmente Ele aparece no & quot; obfuscation" tutoriais, mas nunca trata o texto invertido como protegido.
| Tipo de reversão | exemplo | na ferramenta? | trecho de código |
|---|---|---|---|
| personagens | abc → cba |
Sim (o único modo) | [...s].reverse().join('') |
| palavras | a b c → c b a |
Não - faça isso em código | s.split(' ').reverse().join(' ') |
| linhas | ordem de linha invertida | Não - faça isso em código | s.split('\n').reverse().join('\n') |
| seguro para grafemas | Emoji permanece intacto | Não - precisa de Intl.Segmenter | Veja o nível 3 acima |
A abordagem de dois pontos, se você estiver se preparando para entrevistas
A razão pela qual os entrevistadores adoram essa pergunta é que a resposta elegante não usa um reverso integrado. Você anda duas dicas uma na outra e troca:
Original: H E L L O
i j swap H and O
O E L L H
i j swap E and L
O L L E H
ij pointers meet — done
Ele é executado em tempo O (n) e, feito no lugar em uma matriz mutável, espaço extra O (1).Em JavaScript strings são imutáveis para que você possa' t literalmente trocar no lugar, mas a lógica de dois pontos é o que eles' re verificando você entende A versão recursiva - reverse(s) = last char + reverse(rest)- é mais bonito, mas usa espaço O (n) call-stack, que é o trade-off que vale a pena mencionar em voz alta na entrevista.
E lembre-se da propriedade que torna o teste trivial: a reversão é sua própria inversa. Reverta uma string duas vezes e você estará de volta ao ponto de partida. Quando eu testei a unidade, qualquer código de reversão, é a afirmação número um: reverse(reverse(x)) === x para um lote de entradas, incluindo - especialmente - emoji, então o teste realmente pega o bug do par substituto em vez de escondê-lo.
Perguntas frequentes
A ferramenta reversa da string suporta a palavra ou a reversão de linha?
não . Ele tem um único modo que inverte caracteres. Não há nenhuma ordem separada de palavra ou modo de ordem de linha. Se você precisar reverter a ordem das palavras ou linhas, faça-o em código com split(' ') ou split('\n') seguido de .reverse().join(...).
Por que os emojis saem distorcidos após a reversão?
Porque a ferramenta reverte pela unidade de código UTF-16, como o JavaScript split(''). Sequências de emoji e flag são armazenadas como pares substitutos - duas unidades de código que só fazem sentido juntas - e a reversão as separa. Texto simples e caracteres CJK são unidades de código único, portanto, são invertidos corretamente.
Ele lida com Unicode e texto CJK?
parcialmente. Os caracteres acentuados chineses, japoneses, coreanos, cirílicos e pré-compostos são invertidos corretamente porque cada um é uma unidade de código única. Emoji, emoji de bandeira e marcas decompostas decompostas vão quebrar. Para um manuseio totalmente correto em seu próprio código, use Intl.Segmenter com granularidade do grafema.
Meu texto foi enviado para um servidor?
Não. A reversão acontece localmente no seu navegador enquanto você digita - o texto nunca é carregado. Isso o torna seguro para reverter strings confidenciais ou privadas.
Como verifico se uma palavra é um palíndromo?
inverta-o com o corda reversa ferramenta e comparar com o original Se eles' são idênticos, it' s um palíndromo Para frases, remover espaços, pontuação, e diferenças de caso antes de comparar - & quot; Um homem um plano um canal Panamá" é um palíndromo somente após a normalização.
Ele pode lidar com um texto muito longo?
Sim. Como é executado no seu navegador, o limite prático é a memória do seu dispositivo, que cobre confortavelmente milhões de personagens. Ele reverte ao vivo enquanto você digita, então as pastas extremamente grandes podem parecer um pouco menos instantâneas, mas não há uma viagem de ida e volta no servidor.
Por que a reversão de uma string é uma pergunta tão comum de entrevista?
Ele embala um monte de fundamentos em um pequeno problema: array e manipulação de strings, a técnica de dois pontos, no lugar versus cópia trade-offs, recursão, e - se o entrevistador é afiado - Unicode edge cases It' s fácil de iniciar e tem profundidade suficiente para separar uma resposta rápida de um completo.
Ferramentas relacionadas:



