无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
示例1:
输入:S = "qwe" 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
示例2:
输入:S = "ab" 输出:["ab", "ba"]
提示:
- 字符都是英文字母。
- 字符串长度在[1, 9]之间。
这个问题可以通过深度优先搜索(DFS)的方式来解决。我们可以定义一个辅助函数,它接受一个字符串和一个目标值(1的个数),然后检查这个字符串是否与目标值相等。如果是,就返回这个字符串。如果不是,就继续递归地检查它的每个字符的位置。
以下是Python代码实现:
```python
def permuteUnique(S):
result = []
def dfs(s, path):
if not s:
result.append(''.join(path))
else:
for i in range(len(s)):
if i == 0 or s[i] != s[i - 1]:
dfs(s[:i] + s[i + 1:], path + [s[i]])
dfs(sorted(S), [])
return result
```
在这个实现中,permuteUnique函数的时间复杂度是O(n! * n),其中n是字符串的长度。这是因为我们需要进行n!次排列操作,并且每次操作都需要对字符串进行排序。空间复杂度是O(n!),因为它需要存储所有的排列结果。