Description
给定一个字符串 s
,找出其中所有不含重复字符的子串,并将它们按照字典序排序后输出。
Format
Input
s = "abcabcbb"
Output
['a', 'ab', 'abc', 'b', 'bc', 'bca', 'c', 'ca', 'cab', 'cb']
解释:'abca'虽然为子串,含有重复字符,则不符合要求。
注意:
0 <= s.length <=10
s
仅由小写英文字母组成。s
为空,则输出[]即可。
Samples
输入数据 1
pwwkew
输出数据 1
['e', 'ew', 'k', 'ke', 'kew', 'p', 'pw', 'w', 'wk', 'wke']
tips:
字典序可以对得到的列表进行sort排序,输出就是按照字典的顺序啦
思路:
1.定义一个空列表 用来接收经过处理后的切片
2.双重循环下用 str[ i : j ] 获得字符串中的每一个切片
3.set()处理掉全部有重复字母的切片
4.if第一个判断len(set(str[ i : j ]))是否相同 长度没有变化的切片可以考虑存入列表
5.if第二个判断是否已经存入列表 如果没有则使用append添加到列表末尾
代码:
# 接收输入的字符串
s = input()
# 定义函数 筛选字符
def find(s):
# 遍历给定字符串,就要先知道字符串有多长
n = len(s)
# 空的列表
res = []
# 遍历字符串
for i in range(n):
# 从当前看的字符的下一个字符开始看起
for j in range(i + 1, n + 1):
# s[i:j]对s字符串切片处理 set()筛选掉重复的字母
# 这里用if进行比较是因为经过set处理后,有重复字母的元素会被删除一个
# 所以if第一个判断长度相等的切片都是不包含重复字母的切片
if len(set(s[i:j])) == j - i and s[i:j] not in res:
# 所得到的有效切片序列可以加在列表的末尾
res.append(s[i:j])
# 对所得到的列表排序 以便以字典序输出
return sorted(res)
print(find(s))
不用函数:
s = input()
n = len(s)
res = []
for i in range(n):
for j in range(i + 1, n + 1):
if len(set(s[i:j])) == j - i and s[i:j] not in res:
res.append(s[i:j])
res.sort()
print(res)