Problem:-
Solution:-
We define the following terms:
-
For example,
ball < cat
,dog < dorm
,Happy < happy
,Zoo < ball
. - A substring of a string is a contiguous block of characters in the string. For example, the substrings of
abc
area
,b
,c
,ab
,bc
, andabc
.
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 .
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 :
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.
import java.util.Scanner;
public class Solution {
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
smallest = largest = s.substring(0, k);
for (int i=1; i<s.length()-k+1; i++) {
String substr = s.substring(i, i+k);
if (smallest.compareTo(substr) > 0)
smallest = substr;
if (largest.compareTo(substr) < 0)
largest = substr;
}
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));
}
}
can you help me with the iteration.
ReplyDeleteI am getting the following variable value when i am iterating.
when i=5;
substring=MET
and smallest=com ,largest=ome
at that time none of the condition in if() is getting true can you help with me?
why are we writing this line
ReplyDeletesmallest = largest = s.substring(0, k);
if s.length=k then it will not print anything that is why he use this line
Deletesmallest = largest = s.substring(0, k); this line is initializing the first set o substring in both so that it can be compared with the next one
Deletebecause of this only we have started loop from 1
i < s.length() - k
ReplyDeleteexplain please
s.length() is the length of the string whereas k is the length of substring. If i(array index)<(length of string - length of substring) then the programs exicutes
DeleteWhy -k+1
ReplyDeleteWhy -k+1
ReplyDeleteThank you.It works!
ReplyDelete