ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《剑指offer》面试题16:不含重复字符的最长子字符串

2021-09-04 13:30:42  阅读:30  来源: 互联网

标签:P2 字符 面试题 repeat offer no length 16 字符串


"""
题目:输入一个字符串,求该字符串中不含重复字符的最长子字符串的长度。
     例如,输入字符串’babcca',其最长的不含重复字符的子字符串是‘abc’,长度为3
解题思路:解该题的核心思想是,如何通过恰当的双指针移动来截取子字符串。至于子字符串中是否包含重复字符这都很好判断。
        如何恰当的通过双指针截取子字符串呢?P1的起始位置为0,P2的起始位置为1.
        首先判断P1-P2是否有重复字符,如果没有,则持续右移P2,并使用列表T1记录下每个无重复字符的子字符串的长度
        直到发现P1-P2有重复字符,则P2不动,将P1右移,直到P1-P2没有重复字符,
        如此循环,直到P2到达字符串末尾+1。然后去T1中的最大值就是最长无重复子字符串的长度.
        注意这个结束循环的判断条件,是需要好好思考的。
"""


def no_repeat(t):
    length = len(t)
    t_list = list(t)
    p1, p2 = 0, 1
    # no_repeat_length负责记录无重复字符的子字符串的长度
    no_repeat_length = []
    while p2 != length+1:
        sub_t = t_list[p1:p2]
        if len(sub_t) == len(set(sub_t)):
            no_repeat_length.append(p2-p1)
            p2 += 1
        else:
            p1 += 1
    return max(no_repeat_length)


t = 'babccabfg'
t2 = 'sdsasdssbfsddfhjkiuowewewe'
t3 = 'abcdefffffff'
print(no_repeat(t))
print(no_repeat(t2))
print(no_repeat(t3))

标签:P2,字符,面试题,repeat,offer,no,length,16,字符串
来源: https://blog.csdn.net/inside802/article/details/120098445

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有