ICode9

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

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

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

标签: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有