Esse problema pede dois inputs: uma string
e um int
. Essa string
terá seus caracteres separados do tamanho do int
que receber.
Exemplo de input
:
estratosfera
2
Os caracteres serão divididos pelo número de entrada (no caso acima, 2):
es tr at os fe ra
A partir desse input
, e sabendo que devemos dividir os caracteres de acordo com o número de entrada, usaremos o .compareTo()
para organizar as silabas em ordem alfanumérica.
O output deve ser organizado em dois resultados:
conjunto de caracteres de menor valor
conjunto de caracteres de maior valor
Isso significa que primeiro receberemos a divisão que começa com a primeira letra possível do alfabeto (e, por isso, com o menor valor) e depois receberemos com a última letra possível do alfabeto. A palavra estratosfera
seria organizada, pelo método .compareTo()
, da seguinte forma:
at es fe os ra tr
Mas, como queremos apenar o conjunto de caracteres de menor e de maior valor, o output será:
at //.. conjunto de caracteres de menor valor
tr //.. conjunto de caracteres de maior valor
=======================
O código começa assim:
import java.util.Scanner;
public class Solution {
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
// Complete the function
// 'smallest' must be the lexicographically smallest substring of length 'k'
// 'largest' must be the lexicographically largest substring of length 'k'
return smallest + "\n" + largest;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
int k = scan.nextInt();
scan.close();
System.out.println(getSmallestAndLargest(s, k));
}
}
=========
O passo a passo consiste em:
- Declarar que as variáveis
smallest
elargest
começam em 0 e tem o tamanho de caracteres declarados pelo inputk
. Essa declaração é só para começar, porque será substituída posteriormente. Por isso as duas são iguais. - Declarar um
int
que começa em 0 - Fazer um
while
que some a variáveli
comk
(número de entrada no input) - Enquanto essa soma for menor ou do mesmo tamanho da
string
, fazer umasubstring
que comece emi
(a partir de 0) e termine no número de inputk + i
. Se for menor do que 0, significa que o conjunto de caracteres é menor alfanumericamente. - Se o conjunto de caracteres for menor alfanumericamente, isso significa que vamos substituir o valor de
smallest
. - Se o conjunto de caracteres não for menor (e, portanto, não retornar um número negativo), vai para o segundo
if
. Se, na comparação, o conjunto de caracteres for maior do que o valor inicial declarado nolargest
, este conjunto substitui o valor anterior. - Por fim, somamos mais uma posição
(i++)
para dar cabo à iteração e ir comparando todos os conjuntos de caracteres até que termine as possibilidades de acordo com o tamanho(length)
daString
de input(s)
.
=========
Solução
String smallest = s.substring(0,k);
String largest = s.substring(0,k);
int i = 0;
while (i+k <= s.length()) {
if(s.substring(i,i+k).compareTo(smallest) < 0 ) {
smallest = s.substring(i,i+k);
} else if (s.substring(i,i+k).compareTo(largest) > 0) {
largest = s.substring(i,i+k);
}
i++;
}
=========
Referências
- CompareTo() e Substring : dev.to/beatrizmaciel
============
Essa publicação faz parte de uma série de exercícios resolvidos em Java no HackerRank. Acesse a série completa:
- HackerRank #6 | Scanner e End-of-file
- HackerRank #7 | Int to String / String to Int
- HackerRank #8 | Date and Time
- HackerRank #9 | Static Initializer Block
- HackerRank #10 | Currency Formatter
- HackerRank #11 | DataTypes
- HackerRank #12 | Strings Introduction
- HackerRank #13 | Substring Comparisons
- HackerRank #14 | Abstract Class
- HackerRank #18 | BigInteger
- HackerRank #19 | Loops II
- HackerRank #20 | String Reverse
- HackerRank #23 | Instanceof keyword
- HackerRank #26 | Generics
- HackerRank #27 | 1D Array
- HackerRank #28 | Anagrams
- HackerRank #33 | Arraylist
- HackerRank #34 | Exception Handling Try / Catch
- HackerRank #36 | Exception Handling
- HackerRank #37 | List
- HackerRank #38 | SubArray
- HackerRank #39 | HashSet
- HackerRank #40 | Java Dequeue
Top comments (0)