努力学算法的第三天,冲冲冲。
经过前两天的熟悉今天第三题:
1,考虑了两分钟
2,百度了一下“python字符串转数组”
3,五分钟写出了第一次代码,有点高兴的太早,在“ ”这个地方出错了
4,修改了三分钟,主要是调整循环的范围,
5,第二次提交,通过。虽然没有超越多少人,但是值得小小的表扬一下。
思路
从头开始遍历每一个字符放入到hashmap中,然后依次扫描后续每一个字符继续放入到hashmap中,直到某一字符已经存在为止。得到以该字符开头对应的最大无重复字串。循环得到无重复字符的最长字串
我的解,欢迎指正优化
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
maxlen=0
for i in range(1,len(s)+1):
hashmap={}
j=i-1
while (j<len(s)) and (s[j] not in hashmap):
hashmap[s[j]]=j
j+=1
maxlen=len(hashmap) if len(hashmap) > maxlen else maxlen
return maxlen
滑动窗口
当然我肯定不会就此满足,于是我在一个精选中看到了四个字滑动窗口
不错,我的思想就是这个,但是代码实现上稍微有点区别。
并且这位大佬总结了所有的LeetCode中滑动窗口的题,佩服佩服。
点我去看,快点,快点!
画解剑指offer
双膝奉上,图画的也太骚气了。这个不但要看图,评论里也一堆大神进行优化。
牛!! !! !! !! !! !!! !! !! !! !!! !! !! !!! !! !!! !!! !!
仿写画解的python代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = 0
table = {}
start = 0
for end, v in enumerate(s):
if v in table.keys():
start = max(table.get(v) + 1, start)
ans = max(ans, end - start + 1)
table[v] = end
return ans
启发:善用枚举类型.
这个是左右同时的窗口滑动,深入理解后感觉真的是太妙了。每当后面有重复字符出现时,就将头指针移动到上一次该字符出现位置的下一个位置,很强,很强。
又学到了
仅供个人学习使用,侵删