You have n
tiles
, where each tile has one letter tiles[i]
printed on it.
Return the number of possible non-empty sequences of letters you can make using the letters printed on those tiles
.
Example 1:
Input: tiles = "AAB" Output: 8 Explanation: The possible sequences are "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA".
Example 2:
Input: tiles = "AAABBC" Output: 188
Example 3:
Input: tiles = "V" Output: 1
Constraints:
1 <= tiles.length <= 7
tiles
consists of uppercase English letters.This problem asks to find the number of unique non-empty sequences that can be formed using the given tiles. The solution uses a backtracking approach to explore all possible sequences.
Approach:
The core idea is to use a depth-first search (DFS) or backtracking algorithm. We maintain a count of each letter's frequency. In each recursive call, we try to include each letter present (whose count is greater than 0). After including a letter, we recursively explore further possibilities and then backtrack (restore the count) to explore other combinations.
Algorithm:
Count Letter Frequencies: First, we count the frequency of each letter in the input string tiles
using a hash map (or array in the provided code examples).
Depth-First Search (DFS):
dfs
function takes the frequency counter as input.ans
).dfs
to explore sequences starting with the selected letter.Return Total Count: The dfs
function returns the total number of possible sequences found.
Time Complexity Analysis:
The time complexity is difficult to express precisely, but it's bounded by the number of possible permutations of the tiles. In the worst case (all letters are distinct), the complexity would be O(n!), where n is the length of tiles
. However, because there can be duplicate letters, the actual number of permutations is significantly less than n!. The complexity is closer to the number of unique permutations considering the frequency of each letter.
Space Complexity Analysis:
The space complexity is dominated by the recursion depth of the DFS. In the worst case (all letters are distinct), the depth can be O(n). Additionally, the space used for the frequency counter is O(1) (since the number of unique characters is limited to 26). Therefore, the overall space complexity is O(n) due to the recursion stack.
Code Explanation (Python):
from collections import Counter
class Solution:
def numTilePossibilities(self, tiles: str) -> int:
def dfs(cnt: Counter) -> int:
ans = 0
for i, x in cnt.items():
if x > 0:
ans += 1 # Count the current sequence
cnt[i] -= 1 # Include letter
ans += dfs(cnt) # Explore further
cnt[i] += 1 # Backtrack: remove the letter
return ans
cnt = Counter(tiles) # Count initial letter frequencies
return dfs(cnt) # Start the backtracking search
The other language solutions follow the same logic, only differing in syntax and data structure implementations. The core algorithm remains identical across all languages.