3. Longest Substring Without Repeating Characters
不重复字符的最长子字符串
本文题目来自LeetCode OJ,解法不是最优,本人初学python,还望各位多指点。
题目翻译
给定一个字符串,找到不重复字符的最长子字符串的长度。
例子:
- 给定字符串
"abcabcbb"
,答案是"abc"
,其中长度是3。 - 给定字符串
"bbbbb"
,答案是"b"
,其中长度是1。 - 给定字符串
"pwwkew"
,答案是"wke"
,其中长度为3。注意,答案必须是子字符串,"pwke"
是一个子序列,但是不是子字符串。
思路
从左往右依次遍历字符串s,如果不在substr中,则加入,如果item在substr中,首先判断目前的子字符串的长度是否为当前最长,然后我们思考下一个子字符串应该是从重复的这个字符的下一个开始的,因为如果在这个字符之前那么必然还是会遇见重复的item的。全部遍历后 判断当前长度是否为最长。
Leetcode的结果是运行82ms 效率是96.61%
代码
def lengthOfLongestSubstring(s):
"""
:type s: str
:rtype: int
"""
# s为空的情况
if not s:
return 0
longestlenth = 1 # 非空子字符串的长度最小为1
substr = "" # 子字符串
for item in s:
if item not in substr:
substr += item
else:
if len(substr) > longestlenth:
longestlenth = len(substr)
# 应该从重复的下一个字符开始继续判断
substr += item
substr = substr[substr.index(item)+1:]
if len(substr) > longestlenth:
longestlenth = len(substr)
return longestlenth