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 smallestelargestcomeç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 intque começa em 0
- Fazer um whileque some a variávelicomk(número de entrada no input)
- Enquanto essa soma for menor ou do mesmo tamanho da string, fazer umasubstringque 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)daStringde 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)