LeetCode 3. longest characters & 切片
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 & 切片的更多相关文章
- C++版- Leetcode 3. Longest Substring Without Repeating Characters解题报告
Leetcode 3. Longest Substring Without Repeating Characters 提交网址: https://leetcode.com/problems/longe ...
- [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 ...
- [LeetCode] 3.Longest Substring Without Repeating Characters 最长无重复子串
Given a string, find the length of the longest substring without repeating characters. Example 1: In ...
- [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 ...
- 【LeetCode】Longest Word in Dictionary through Deleting 解题报告
[LeetCode]Longest Word in Dictionary through Deleting 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode. ...
- LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法
LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...
- [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...
- [LeetCode] 674. Longest Continuous Increasing Subsequence_Easy Dynamic Programming
Given an unsorted array of integers, find the length of longest continuous increasing subsequence (s ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
随机推荐
- 在Python中调用Java扩展包HanLP测试记录
最近在研究中文分词及自然语言相关的内容,关注到JAVA环境下的HanLP,HanLP是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词.CRF分词.索引分词.用户自 ...
- MySQL程序之mysqlshow详解
mysqlshow命令详解 显示MySQL数据库的结构(数据库.表和列) 如果最后一个参数包含shell或SQL通配符(*,?,%,_)将显示通配符匹配的内容. 如果没有给定数据库,则显示所有匹配的数 ...
- Linux中chown和chmod的区别和用法
转载自:http://www.cnblogs.com/EasonJim/p/6525242.html chmod修改第一列内容,chown修改第3.4列内容: chown用法: 用来更改某个目录或文件 ...
- 解决cron无法运行报错:FAILED to authorize user with PAM (Module is unknown)
查看cron运行日志 tail -f /var/log/cron 报如下错误: May 8 10:14:01 localhost crond[9399]: (root) FAILED to autho ...
- 在MacOSX系统上的一些工具和问题汇总
Android 模拟器 1. 安装模拟器 点击链接:https://cloud.genymotion.com/page/launchpad/download 需要先注册登录一下. 2.安装Virtua ...
- 加深关于Java中char类型的理解
1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a'; //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=1 ...
- VB (空字串)、Null、Empty、与 Nothing 的区别
VB (空字串).Null.Empty.与 Nothing 的区别 http://blog.sina.com.cn/s/blog_3f39ffb50100bguw.html 变量 A.B.C.D 分别 ...
- Windows进程单实例运行
场景 Windows进程单实例运行,如果有进程没有退出,继续等待,直到进程完全退出,才会进入下一个实例 HANDLE pHandle = NULL; do { pHandle = ...
- bzoj5008: 方师傅的房子
Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形 ,原点一定严格在凸多边形内部.有m个人也到了这个二维平面.现在你得到了m个 ...
- bzoj4948: World Final2017 A
求简单多边形内的最长线段长度 显然存在一组最优解,使其所在直线经过多边形的两个端点,枚举这两个端点,求出直线和多边形的有效交点,从而得出直线有哪些部分在多边形内(含边界). 由于多边形的一些边可能与直 ...