第四题、
给定一个字符串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])
- 1
- 2
- 3
- 4
- 5
- 6
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
评论记录:
回复评论: