题目介绍
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的想法
- 逐个取出字符,合成新的字符串,如果遇到重复的字符,就计算这时的字符串长度,最后取最大的
我遇到的问题
- 当遇到重复字符后,将计数的字符串重置了,前边没有重复字符的一段字符串没加入计数,导致结果错误
- 退出循环后,最后得到的字符串的长度没有与当前最大长度比较,导致得到的结果出现错误
解决办法
- 找到计数的字符串中重复的字符,将这个字符及前边的字符都删除,保留其后的字符串,继续进行计数
- 退出循环后,进行比较
实现代码
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# 初始化用于计数的字符串及保存最大长度的变量
r = ''
length = 0
# 遍历字符串,找到不重复的字符,进行计数
for char in s:
if char not in r:
r += char
else:
if len(r) > length:
length = len(r)
r = r[r.index(char) + 1:] + char
# 退出循环后,最后得到的字符串再进行比较
if len(r) > length:
length = len(r)
return length
最后结果
注
- 可能有点麻烦,但能力有限,摊手手
- 鄙人是个菜鸡,我只是将我的想法说出来供大家参考,有什么问题可以提出来,但求各位大佬手下留情,不要喷我
结尾
以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。