Longest Substring Without Repeating Characters

找无重复的最长子串

第1次提交
class Solution:
def lengthOfLongestSubstring(self,s):
"""
type s: str
rtype: int
"""
maxLen=0
i=0 for k,c in enumerate(s):
# c在之前出现过多少次
#print(i)
#print(s[i:k+1],s[i:k+1].count(c),k-i)
if s[i:k+1].count(c) > 1 : # 最长赋值
if (k-i)>maxLen:
maxLen = k-i
# 重新计算的切片起点
i=k return maxLen if __name__ == "__main__":
sl=[
'abcabcbb','bbbbb','pwwkew','','c','au'
];
for s in sl:
print(Solution().lengthOfLongestSubstring(s))
print("end-------------")

Wrong Answer:

Input:
"c"
Output:
0
Expected:
1

没有重复的时候忘了赋值了,for之后如果还未0就计算长度

第2次提交
class Solution:
def lengthOfLongestSubstring(self,s):
"""
type s: str
rtype: int
"""
maxLen=0
i=0 for k,c in enumerate(s):
# c在之前出现过多少次
#print(i)
print(s[i:k+1],s[i:k+1].count(c),k-i)
if s[i:k+1].count(c) > 1 : # 最长赋值
if (k-i)>maxLen:
maxLen = k-i
# 重新计算的切片起点
i=k if maxLen==0:
maxLen=len(s) return maxLen

Wrong Answer:

Input:
"aab"
Output:
1
Expected:
2

想了一阵,发现我的逻辑有问题,for每次都应该计算长度,有重复则计算切片-1的,无重复则计算切片长度。看测试数据感觉没漏洞了,提交下:

第3次提交
class Solution:
def lengthOfLongestSubstring(self,s):
"""
type s: str
rtype: int
"""
maxLen=0
i=0 # 最后的切片
sp=[]
for k,c in enumerate(s):
# c在之前出现过多少次
#print(i)
sp=s[i:k+1]
print(sp,sp.count(c),k-i) # 这里分两种,1中有重复则计算之前的长度,无重复则计算现在长度
if sp.count(c) > 1 : # 最长赋值
if (k-i)>maxLen:
maxLen = k-i
# 重新计算的切片起点
i=k
else:
if len(sp)>maxLen:
maxLen = len(sp) return maxLen

Wrong Answer:

Input:
"dvdf"
Output:
2
Expected:
3

再次推翻了之前的想法,不应该直接重复就再次计算的,应该重复了,从起点+1切片再次开始

第4次提交
class Solution:
def lengthOfLongestSubstring(self,s):
"""
type s: str
rtype: int
"""
maxLen=0 # 最后的字符
lastChar=None
# 在处理的切片
sp=[]
# 切片起点
i=0
# 当前下标
k=0
while k!=len(s[i:]):
c=s[i:][k] sp=s[i:i+k+1]
#print(sp,c,sp.count(c),"sp:",len(sp),end=" len:") # 这里分两种,1中有重复则计算之前的长度并且起点+1切片重新开始for。无重复则计算现在长度
if sp.count(c) > 1 :
findLen=len(sp)-1
# 重新计算的切片起点
i+=1
k=0
else:
findLen=len(sp)
k+=1 if findLen>maxLen:
maxLen=findLen #print(maxLen) return maxLen

Time Limit Exceeded:

Last executed input:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~
......
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCD"

稍微优化一下切片的计算次数

第5次提交
class Solution:
def lengthOfLongestSubstring(self,s):
"""
type s: str
rtype: int
"""
maxLen=0 # 最后的字符
lastChar=None
# 在处理的切片
sp=[]
# 切片起点
i=0
# 当前下标
k=0 lists=s[i:]
lens=len(lists)
while k!=lens:
c=lists[k] sp=lists[:k+1]
#print(sp,c,sp.count(c),"sp:",len(sp),end=" len:") # 这里分两种,1中有重复则计算之前的长度并且起点+1切片重新开始for。无重复则计算现在长度
if sp.count(c) > 1 :
findLen=len(sp)-1
# 重新计算的切片起点
i+=1
lists=s[i:]
lens=len(lists)
k=0
else:
findLen=len(sp)
k+=1 if findLen>maxLen:
maxLen=findLen #print(maxLen) return maxLen

总结:思考不够全面。

LeetCode 3. longest characters & 切片的更多相关文章

  1. C++版- Leetcode 3. Longest Substring Without Repeating Characters解题报告

    Leetcode 3. Longest Substring Without Repeating Characters 提交网址: https://leetcode.com/problems/longe ...

  2. [leetcode]340. Longest Substring with At Most K Distinct Characters至多包含K种字符的最长子串

    Given a string, find the length of the longest substring T that contains at most k distinct characte ...

  3. [LeetCode] 3.Longest Substring Without Repeating Characters 最长无重复子串

    Given a string, find the length of the longest substring without repeating characters. Example 1: In ...

  4. [LeetCode] 340. Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

    Given a string, find the length of the longest substring T that contains at most k distinct characte ...

  5. 【LeetCode】Longest Word in Dictionary through Deleting 解题报告

    [LeetCode]Longest Word in Dictionary through Deleting 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode. ...

  6. LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法

    LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...

  7. [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)

    指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...

  8. [LeetCode] 674. Longest Continuous Increasing Subsequence_Easy Dynamic Programming

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence (s ...

  9. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

随机推荐

  1. Java NIO通信的基础,基于TCP C/S例子介绍

    为了更好的理解Netty异步事件驱动网络通信框架,有必要先了解一点Java NIO原生的通信理论,下面将结合基于TCP的例子程序,含客户端和服务端的源码,实现了Echo流程. Java NIO的核心概 ...

  2. 使用PHPMAILER实现PHP发邮件功能

    第一步: 打开网址https://github.com/PHPMailer/PHPMailer/ 下载PHPMailer,PHPMailer 需要 PHP 的 sockets 扩展支持,而登录 QQ ...

  3. 转 Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

    今早刚上班.客户打电话过来说系统访问不了,输入用户名.用户号不能加载出来!听到这个问题,第一时间想到的是不是服务器重新启动了,Oracle数据库的相关服务没有启动的原因.查看服务的时候,发现相关的服务 ...

  4. 2015.4.21第一篇cnblog文章

    个人学习记录第一篇. 输出才是最好一条途径,这也是开源的精神所在.

  5. java.lang.OutOfMemoryError: Java heap space解决方法 (有问题咨询加微信)

    支付宝扫码领取最高99元红包,到店支付15天,双十二瓜分15亿,打开支付宝首页搜“555176706”领红包,领到大红包的小伙伴赶紧使用哦! //首先检查程序有没有限入死循环 这个问题主要还是由这个问 ...

  6. 前端安全之CSRF

     一.跨站点请求伪造(CSRF)       什么是csrf呢? 借助用户的身份去做有损用户利益(一些事情)的事情. 怎么实现跨站点请求伪造呢? 1.伪造者通过创造一个带有<a href=&qu ...

  7. Javascript中变量提升的问题(五)

    一.函数声明变量提升   函数声明具有变量提升的问题,所以在函数被声明之前就可以访问. console.log(getValue()); function getValue() { return 'a ...

  8. PAT 乙级 1029 旧键盘(20) C++版

    1029. 旧键盘(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文字的 ...

  9. 高精度算r的n次方 问题 H: 乾隆巡江南

    问题 H: 乾隆巡江南 时间限制: 2 Sec  内存限制: 128 MB提交: 13  解决: 3[提交][状态][讨论版] 题目描述 话说乾隆带着他的宰相刘罗锅和你出巡江南,被杭州城府邀请去听戏, ...

  10. BloomFilter理解

    知道BloomFilter是因为RocksDB数据库中用到了这个技术,用于判断1个数据是否存在于1个SST文件中. BloomFilter可能存在误判,就是判断数据是存在集合中,而实际上可能不存在,概 ...