题解 | #最长不含重复字符的子字符串#

最长不含重复字符的子字符串

http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

1.问题形式化

输入:长为n的字符串 输出:不含重复字符的子字符串的最长长度

2.题目分析

用dp[i]表示前i个字符中包含第i个字符的最长不含重复字符的子字符串的长度值,for循环从i-1往前遍历找到与第i个字符相同的字符的位置j。dp[i]的取值受到两个因素的限制,一个是i左边取值和i处相同的字符串的位置,另一个是dp[i-1]的值。

当i-j<dp[i-1]时,dp[i]=i-j;当i-j>=dp[i-1]时,dp[i]=dp[i-1]+1

举例说明:“abcfdaf”当i=6指向第二个f时,j=3指向第一个f,i-j=3;dp[i-1]=len("bcfda")=5,此时dp[i]=len("daf")=3.

3.伪代码

def longest_sub_str(s):
	n=len(s)
    dp=[1]
    for i =1 to n do:
    	for j=i-1 to -1 step -1 do:
        	if s[j]==s[i] then
            	temp=i-j
                break
            elif j==0 then:
            	temp=i+1
        dp.append(min(dp[i-1]+1,temp))
    return max(dp)
全部评论

相关推荐

码农索隆:7*24,随时待命,这是去🇷🇺打仗去了啊
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务