Problem
1. Esta questão envolve raciocínio sobre strings compostas por letras maiúsculas. Você implementará dois métodos relacionados que aparecem na mesma classe (não mostrados). O primeiro método usa um único parâmetro de string e retorna uma versão embaralhada dessa string. O segundo método pega uma lista de strings e modifica a lista misturando cada entrada da lista. Qualquer entrada que não pode ser embaralhada é removida da lista.
a) Escreva o método scrambleWord, que recebe uma determinada palavra e retorna uma string que contém uma versão embaralhada da palavra de acordo com as seguintes regras.
- O processo de embaralhamento começa na primeira letra da palavra e continua da esquerda para a direita.
- Se duas letras consecutivas consistem em um "A" seguido por uma letra que não seja um "A", então as duas letras são trocadas na string resultante.
- Depois que as letras em duas posições adjacentes forem trocadas, nenhuma dessas duas posições poderá ser envolvida em uma troca futura.
A tabela a seguir mostra vários exemplos de palavras e suas versões embaralhadas.
palavra |
Resultado retornado por scrambleWord(word) |
"TANTO" |
"TNA" |
"ABRACADABRA" |
"BARCADABARA" |
"UAU" |
"UAU" |
"AARDVARK" |
"ARADVRAK" |
"OVOS" |
"OVOS" |
"A" |
"A" |
"" |
"" |
Complete o método scrambleWord abaixo.
/** Embaralha uma determinada palavra.
* @param word a palavra a ser embaralhada
* @return a palavra embaralhada (possivelmente igual a palavra)
* Pré-condição: a palavra é uma string vazia ou contém apenas letras maiúsculas.
* Pós-condição: a string retornada foi criada a partir da palavra da seguinte forma:
* - a palavra foi embaralhada, começando na primeira letra e continuando da esquerda para a direita
* - duas letras consecutivas consistindo de "A" seguido de uma letra que não era "A" foram trocados
* - as letras foram trocadas no máximo uma vez
*/
public estático String scrambleWord(String palavra)
b) Escreva o método scrambleOrRemove, que substitui cada palavra no parâmetro wordList por sua versão embaralhada e remove todas as palavras que não foram alteradas após a embaralhamento. A ordem relativa das entradas em wordList permanece a mesma de antes da chamada para scrambleOrRemove.
O exemplo a seguir mostra como o conteúdo de wordList seria modificado como resultado da chamada scrambleOrRemove.
Antes da chamada para scrambleOrRemove:
lista de palavras
0 |
1 |
2 |
3 |
4 |
"TANTO" |
"ABRACADABRA" |
"WHOA" |
"APPLE" |
"OVOS" |
Após a chamada para scrambleOrRemove:
lista de palavras
0 |
1 |
2 |
"TANTO" |
"BARCADABARA" |
"PAPLE" |