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.
This approach leverages a breadth-first search (BFS) to explore all possible string configurations by applying the given operations. We keep track of already-visited states to avoid processing them again, storing the lexicographically smallest string found in the process.
The key point is to simulate the effect of each operation (addition and rotation) and use a queue to handle the states and explore until no new configurations can be found.
The Python solution uses BFS to explore each possible configuration of the string obtained by performing the operations. Starting from the initial string, it performs an addition operation and a rotation operation, pushing these new strings to the queue to be evaluated later, ensuring that each configuration is only visited once by using a set.
Python
C++
Java
C#
JavaScript
Time Complexity: O(n * 10 * n), where n is the length of the string, as the cycle for each index via addition is at most 10, and there are n possible configurations for rotations.
Space Complexity: O(n * n) for storing possible configurations in the 'visited' set.
This approach reduces complexity by detecting cycles in possible configurations without exhausting all possibilities. It leverages mathematical principles governing rotations and additions, where applying operationsform sequences and constraints that can terminate the search early once a smallest string is identified.
By identifying recurring patterns in transformation sequences, computational resources can be conserved, and optimizations applied, particularly in identifying redundant operations that do not lead to smaller strings.
This Python code reduces operations by recognizing cycles in resulting transformations the operations can achieve. It systematically applies a limited number of additions and explores all rotations, using combinations to ensure minimal complexity is faced.
Python
Time Complexity: O(10 * n^2), reduced due to early detection of cycles and constraints on possibilities given operation properties.
Space Complexity: O(n).
Since the data scale of this problem is relatively small, we can use BFS to brute-force search all possible states and then take the lexicographically smallest state.
Python
Java
C++
Go
TypeScript
We observe that for the addition operation, a digit will return to its original state after at most 10 additions; for the rotation operation, the string will also return to its original state after at most n rotations.
Therefore, the rotation operation produces at most n states. If the rotation count b is even, the addition operation only affects digits at odd indices, resulting in a total of n times 10 states; if the rotation count b is odd, the addition operation affects both odd and even index digits, resulting in a total of n times 10 times 10 states.
Thus, we can directly enumerate all possible string states and take the lexicographically smallest one.
The time complexity is O(n^2 times 10^2) and the space complexity is O(n), where n is the length of string s.
Python
Java
C++
Go
TypeScript
| Approach | Complexity |
|---|---|
| Brute Force with BFS to Check All Combinations | Time Complexity: O(n * 10 * n), where n is the length of the string, as the cycle for each index via addition is at most 10, and there are n possible configurations for rotations. Space Complexity: O(n * n) for storing possible configurations in the 'visited' set. |
| Mathematical Cycle Detection to Minimize Operations | Time Complexity: O(10 * n^2), reduced due to early detection of cycles and constraints on possibilities given operation properties. Space Complexity: O(n). |
| BFS | — |
| Enumeration | — |
| 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 |
Leetcode 1625 | Lexicographically Smallest String After Applying Operations | Common Pattern | MIK • codestorywithMIK • 9,716 views views
Watch 9 more video solutions →Practice Lexicographically Smallest String After Applying Operations with our built-in code editor and test cases.
Practice on FleetCodePractice this problem
Open in Editor