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 ...
随机推荐
- HanLP 关键词提取算法分析详解
HanLP 关键词提取算法分析详解 l 参考论文:<TextRank: Bringing Order into Texts> l TextRank算法提取关键词的Java实现 l Text ...
- [转]You Could Become an AI Master Before You Know It. Here’s How.
转自:https://www.technologyreview.com/s/608921/ai-algorithms-are-starting-to-teach-ai-algorithms/# You ...
- msp430学习笔记-实现开方log等计算及FFT算法(待续)
MSP430 FFT算法实现 http://bbs.21ic.com/icview-391532-1-1.html http://blog.sina.com.cn/s/blog_6cd2030b010 ...
- linux 查看系统磁盘、内存大小
1.磁盘 df -h cat /proc/partitions 2.内存 cat /proc/meminfo cat /proc/meminfo
- 局域网内远程连接OPC配置方法详解
局域网内远程连接OPC配置方法详解 https://wenku.baidu.com/view/20fb8ea6d1d233d4b14e852458fb770bf78a3bcc.html OPC服务 ...
- ul或者ol中添加li元素
<!doctype html><html> <head> <meta charset="utf-8"> ...
- tomcat源码 Container
1.Container的有四个子容器,分别是Engine,Host,Context,Wrapper,如下: 1.Engine:整个Catalina servlet引擎,标准实现为StandardEng ...
- [蓝桥杯]ALGO-97.算法训练_排序
题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...
- Sublime Text 3中文乱码问题解决(最新)
Sublime Text 3是我MacBook Pro最喜欢的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开GBK的代码文件,如果里面有中文 ...
- 【Graphite】使用dropwizard.metrics向Graphite中写入指标项数据
graphite 定时向Graphite中写入指标项数据,指标项模拟个数3000个 使用的类库 官方文档 dropwizard的github地址 Metric官方文档 metrics.dropwi ...