蓝桥杯2023STEMA考试python试卷(10月)第4~6题

第四题、
给定一个字符串s (5≤s长度≤50),请找出S中不含重复字符的最长子串的长度
例如:
s为ababc,其aba、abab、ababc、bab、babc,均为包含量复字符的子串;
而a、b、ab、ba、abc、bc、c均为不含重复字符的子串,最长子串有abc,所以不含重复字符的最长子串的长度为3。
输入描述:输入一个字符串s (5≤s长度≤50)
输出描述:输出一个整数,表示s中不含重复字符的最长子串的长度
样例输入: ababc
样例输出:3

解题思路:
1、通过切片得到对应的所有类型字符串。

a=input()
b=[]
for i in range(0,len(a)+1):
    for j in range(i+1,len(a)+1):
        if a[i:j] not in b:
            b.append(a[i:j])

2、获取到对应的字符串后,则开始对于具有重复类型的字符进行筛除。

##b[-1]代表刚刚加入b列表进来的切片出来元素,列如'a', 'ab', 'aba', 'abab', 'ababc',.....
##b[-1][i] 代表 切片出来元素中第几位上的单个元素,例如:b[-1]='abab'  则b[-1][0]=‘a’
            if len(b[-1])==2 and b[-1][0]==b[-1][1]:
 ##当是两位时,我只需要判断是否相等
                b.remove(b[-1])
            elif len(b[-1])>=3:
 ##当是3位以上,需要判断每一位是否相等,采用到冒泡算法,如下14~17行
                B = 0  
 ##状态值,状态值=0,则无重复位,状态值=1,则有重复位
                for z in range(len(b[-1])):
                    for s in 

你可能感兴趣的:(蓝桥杯STEAM测试,蓝桥杯,算法,python)