Watch 10 video solutions for Lexicographically Smallest String After Applying Operations, a medium level problem involving String, Depth-First Search, Breadth-First Search. This walkthrough by codestorywithMIK has 9,716 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
You are given a string s of even length consisting of digits from 0 to 9, and two integers a and b.
You can apply either of the following two operations any number of times and in any order on s:
a to all odd indices of s (0-indexed). Digits post 9 are cycled back to 0. For example, if s = "3456" and a = 5, s becomes "3951".s to the right by b positions. For example, if s = "3456" and b = 1, s becomes "6345".Return the lexicographically smallest string you can obtain by applying the above operations any number of times on s.
A string a is lexicographically smaller than a string b (of the same length) if in the first position where a and b differ, string a has a letter that appears earlier in the alphabet than the corresponding letter in b. For example, "0158" is lexicographically smaller than "0190" because the first position they differ is at the third letter, and '5' comes before '9'.
Example 1:
Input: s = "5525", a = 9, b = 2 Output: "2050" Explanation: We can apply the following operations: Start: "5525" Rotate: "2555" Add: "2454" Add: "2353" Rotate: "5323" Add: "5222" Add: "5121" Rotate: "2151" Add: "2050"βββββ There is no way to obtain a string that is lexicographically smaller than "2050".
Example 2:
Input: s = "74", a = 5, b = 1 Output: "24" Explanation: We can apply the following operations: Start: "74" Rotate: "47" βββββββAdd: "42" βββββββRotate: "24"ββββββββββββ There is no way to obtain a string that is lexicographically smaller than "24".
Example 3:
Input: s = "0011", a = 4, b = 2 Output: "0011" Explanation: There are no sequence of operations that will give us a lexicographically smaller string than "0011".
Constraints:
2 <= s.length <= 100s.length is even.s consists of digits from 0 to 9 only.1 <= a <= 91 <= b <= s.length - 1Problem Overview: You start with a numeric string s. Two operations are allowed: add a to every digit at odd indices (mod 10), or rotate the string to the right by b positions. Apply any sequence of operations and return the lexicographically smallest string you can produce.
Approach 1: Brute Force with BFS to Check All Combinations (Time: O(K * n), Space: O(K * n))
Model the problem as a state graph where each node is a string configuration. From a state, generate two neighbors: one after applying the add operation and one after the rotate operation. Use Breadth-First Search with a visited set to avoid revisiting the same string. While exploring states, keep track of the lexicographically smallest string encountered. If K is the number of reachable configurations, BFS processes each once and each operation costs O(n) for string transformation.
The key insight is that operations form cycles. Digits wrap around modulo 10 and rotations eventually repeat, so the reachable state space is finite. BFS guarantees you enumerate every valid configuration without duplicates. This approach is straightforward and reliable for typical constraints.
Approach 2: Mathematical Cycle Detection to Minimize Operations (Time: O(n * 10 * (n / gcd(n, b))), Space: O(1))
The operations follow predictable cycles. Rotating by b repeatedly only produces n / gcd(n, b) unique rotations. Similarly, repeatedly adding a to digits cycles every 10 operations because digits are modulo 10. Instead of exploring a graph, iterate through all possible rotation states and simulate addition cycles on odd indices (and even indices when rotation changes parity).
For each rotation, try all possible additions (at most 10) to minimize digits at odd positions. If rotation allows even positions to be affected, apply addition cycles there as well. Build the candidate string and track the smallest lexicographic result. This turns the search into controlled enumeration over small mathematical cycles instead of an unbounded traversal.
The logic relies on modular arithmetic properties of digit addition and rotation parity. You still explore all reachable outcomes, but without storing every intermediate state. The approach combines string manipulation with careful enumeration patterns often seen in DFS style state exploration problems.
Recommended for interviews: Start with the BFS state exploration. It clearly models the problem as a graph and demonstrates understanding of visited-state pruning. After that, discuss the mathematical cycle optimization. Interviewers often appreciate recognizing that rotations and digit additions repeat in predictable cycles, reducing the search space significantly.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute Force BFS State Exploration | O(K * n) | O(K * n) | General solution when modeling operations as a graph of states |
| Mathematical Cycle Enumeration | O(n * 10 * (n / gcd(n,b))) | O(1) | When recognizing rotation and addition cycles to avoid full graph traversal |