题目:
思路
1.将字符串中所包含的字符用字典来表示,刚开始时都赋值为0
2.接着去遍历字符串,找出无重复字符的最长子串输出对应长度
解题过程
1.首先将字符串转换为列表形式
2.判断
1>列表为空,返回0
2>列表由同个字符组成,返回1
3>无上述情况则列表去重 (判断字符串是否都不重复以及将字符串中包含的字符转换为字典来表示都需要用到去重操作,所以先不判断字符串中的字符都不重复),去重后:
- 设置nums代表无重复最长子串的长度,初始为0
- 从第一个字符开始,依次去遍历,则需要遍历 len(t)-1
- 每次遍历的时候,需要将字典中的值全都重置,之后,每次从列表取一个值,这个值所对应的键的值+1,然后去判断对应键的键值是否等于2,等于2说明有重复值了,这趟遍历结束,遍历结束后去判断这趟遍历所得到的不重复子串是否是最长的,是则用nums来代替, 若对应键值对不等于2,则当前的不重复子符加上这个列表值
代码
python
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
t = list(s)
count = len(t)
if count == 0:
return 0
elif t.count(t[0]) == count:
return 1
else:
strs = list(set(t))
dict1 = {}
if len(strs) == len(t):
return len(t)
nums = 0
for i in range(len(t)-1):
for nums1 in strs:
dict1[nums1] = 0
s1 = ''
for j in s[i:]:
dict1[j]+=1
if dict1[j]==2:
break
else:
s1+=j
if len(s1)> nums:
nums = len(s1)
return nums