西南科技大学 --- 派森 P46 寻找不含重复字符的子串

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排序,输出就是按照字典的顺序啦

列表sort()方法_列表排序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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值