Understand Smallest Number From DI String Problem

Problem Name: Smallest Number From DI String
Problem Description:

Construct Smallest Number From DI String

Problem Statement

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.

Example 1

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.


Example 2

Input:
pattern = "DDD"

Output:
4321

Explanation:

  • 4 > 3 (D)
  • 3 > 2 (D)
  • 2 > 1 (D)

Other possible numbers like "9876" or "7654" are larger.


Constraints

  • 1 <= pattern.length <= 8
  • pattern consists only of 'I' and 'D'.
Category:
  • Leetcode Problem of the Day
  • Stacks & Queues
Programming Language:
  • Java
Reference Link:

https://leetcode.com/problems/construct-smallest-number-from-di-string/description

Online IDE

Scroll down for output
Java
Output:

Loading component...

Loading component...

Tracking code (View only. In case you want to track the code, click this button):
Main Function:

Main Function is not defined.

Helper Function:

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 Functions and Global variables:

Utility Function is not required.