Python输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如 输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
时间: 2024-05-04 20:15:17 浏览: 10
可以使用递归的方法求解。每次固定一个字符,将剩余的字符进行全排列,然后将固定的字符与全排列结果进行拼接。具体实现如下:
```python
def permutation(s):
if len(s) <= 1:
return [s]
res = []
for i in range(len(s)):
# 固定一个字符
c = s[i]
# 求剩余字符的全排列
rest = s[:i] + s[i+1:]
rest_permutation = permutation(rest)
# 将固定字符与全排列结果进行拼接
for p in rest_permutation:
res.append(c + p)
return res
s = input("请输入一个字符串:")
res = permutation(s)
res.sort()
for r in res:
print(r)
```
这里需要注意的是,最终输出的结果需要按字典序排序。可以使用Python内置的`sort()`方法进行排序。
相关问题
用python实现19. 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
思路:
将字符串转化为字符数组,使用递归的方式进行排列,每次固定一个字符,然后对剩下的字符进行排列。
代码实现:
```python
def permutation(s):
if not s:
return []
if len(s) == 1:
return list(s)
res = []
for i in range(len(s)):
for j in permutation(s[:i] + s[i+1:]):
res.append(s[i] + j)
return res
s = input("请输入一个字符串:")
res = permutation(s)
res.sort()
for i in res:
print(i)
```
示例输出:
```
请输入一个字符串:abc
abc
acb
bac
bca
cab
cba
```
用python:给定一个字符串 s,找出其中所有不含重复字符的子串,并将它们按照字典序排序后输出。
可以使用滑动窗口来解决这个问题。首先定义两个指针,left和right,表示当前子串的左右边界。然后用一个集合来保存当前子串中出现过的字符,如果右指针指向的字符没有出现过,就将其加入集合中,并将右指针向右移动一位;如果右指针指向的字符已经出现过,就将左指针向右移动一位,并将左指针指向的字符从集合中删除。每次移动左右指针时都要更新最长子串的长度,并将当前子串加入结果列表中。最后按照字典序对结果列表进行排序即可。
以下是代码实现:
```python
def sorted_unique_substrings(s):
res = []
left, right = 0, 0
unique = set()
while right < len(s):
if s[right] not in unique:
unique.add(s[right])
right += 1
else:
unique.remove(s[left])
left += 1
if len(unique) > 0:
substr = s[left:right]
if substr not in res:
res.append(substr)
return sorted(res)
s = "abcabc"
print(sorted_unique_substrings(s)) # ['a', 'ab', 'abc', 'b', 'bc', 'c']
```
注意,这里我们使用了一个set来保存当前子串中出现过的字符,因为set的查找操作是O(1)的,比list快得多,可以大大提高代码的效率。