Lexicographical Order

We define the following terms:
  • Lexicographical Order, also known as alphabetic or dictionary order, orders characters as follows:
    For example, ball < catdog < dormHappy < happyZoo < ball.
  • substring of a string is a contiguous block of characters in the string. For example, the substrings of abc are abcabbc, and abc.
Given a string, , and an integer, , complete the function so that it finds the lexicographically smallest and largest substrings of length .

Input Format
The first line contains a string denoting .
The second line contains an integer denoting .
Constraints
  •  consists of English alphabetic letters only (i.e., [a-zA-Z]).
Output Format
Return the respective lexicographically smallest and largest substrings as a single newline-separated string.

Sample Input 0
welcometojava
3
Sample Output 0
ava
wel

Explanation 0
String  has the following lexicographically-ordered substrings of length :
[ ''ava'',''com'', ''elc'', ''eto'',''jav'',''lco'',''met'',''ome'',''oja'',toj'',''wel'' ]
We then return the first (lexicographically smallest) substring and the last (lexicographically largest) substring as two newline-separated values (i.e., ava\nwel).
The stub code in the editor then prints ava as our first line of output and wel as our second line of output.

Program:


import java.util.Scanner;
public class Solution {
    public static String getSmallestAndLargest(String s, int k) 
    {
        String substring = s.substring(0, k);
        String smallest = substring;
        String largest = substring;

        for (int i = 1; i <= s.length() - k; i++) 
        {
            // Create a substring of length 'k'
            substring = s.substring(i, i + k); 
            // If current substring is lexicographically smaller than 'smallest'
            if (substring.compareTo(smallest) < 0) 
            {
                     smallest = substring;
            }
            // If current substring is lexicographically larger than 'largest'
            if (substring.compareTo(largest) > 0) 
            {
                largest = substring;
            }
        }
        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));
    }
}




Post a Comment

0 Comments