You are given a string pattern
consisting of the characters:
'I'
(Increasing): The next digit must be greater than the current one.'D'
(Decreasing): The next digit must be smaller than the current one.Your task is to generate the smallest lexicographical number using digits 1-9
(without repetition) that follows this pattern.
Input:
pattern = "IDID"
Output:
13254
Explanation:
1 < 3
(I)3 > 2
(D)2 < 5
(I)5 > 4
(D)Other possible numbers are "14253"
and "15234"
, but "13254"
is the smallest.
Input:
pattern = "DDD"
Output:
4321
Explanation:
4 > 3
(D)3 > 2
(D)2 > 1
(D)Other possible numbers like "9876"
or "7654"
are larger.
1 <= pattern.length <= 8
pattern
consists only of 'I'
and 'D'
.https://leetcode.com/problems/construct-smallest-number-from-di-string/description
Loading component...
Loading component...
Main Function is not defined.
INPUT: pattern = "IDID"
OUTPUT: 13254
public static String smallestNumber(String pattern) {
StringBuilder result = new StringBuilder();
Stack<Integer> stack = new Stack<>();
for (int i = 0; i <= pattern.length(); i++) {
stack.push(i + 1);
if (i == pattern.length() || pattern.charAt(i) == 'I') {
while (!stack.isEmpty()) {
result.append(stack.pop());
}//Loop End
}//If End
}//Loop End
return result.toString();
}//function end
Utility Function is not required.