LeetCode——Problem3:Longest Substring Without Repeating Characters

哎哟我天啊。这道题快折磨死我了。刚开始连题都没看明白,就是不知道substring是什么意思。研究了好长时间才看出来的。

光辉历史呀。。。菜死了

1、题目

Given a string, find the length of the longest substring without repeating characters.

Example 1:Input: "abcabcbb"       Output: 3       Explanation: The answer is "abc", with the length of 3.
Example 2:Input: "bbbbb"          Output: 1        Explanation: The answer is "b", with the length of 1.
Example 3:Input: "pwwkew"      Output: 3         Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
 
意思就是给一个字符串,找出最长的无重复子串。
比如
“abcabcbb”:他的无重复子串就是“abc”,“abc”,“b”
“pwwkew”:它的无重复子串就是“pw”,“wke”,“kew”。最长的长度当然是3啦。而不是“pwke”。因为他要找的是子串,并不是要找的不重复序列。
"dvdf":它的无重复子串就是“dv”,“vdf”
说白了,就是一个字符一个字符的遍历,找出来没有重复字符的子字符串。
只是为了看懂这个,就花了好多时间,菜死了。

2、Python解法

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        r=""   #储存无重复子串
        maxNum=0  #最大无重复子串的长度
        for i in s:
            if i not in r:           #如果不在子串里,就代表无重复,直接插进去
                r=r+i
            else:                     #如果在子串里,就代表重复了,不能直接插进去
                if len(r)>maxNum:maxNum=len(r)     #先算出来上一个子串的长度
                r = r[r.index(i)+1:]+i          #把这个相同字符后面的保留。比如"dvdf"。第一个子串是"dv",再遍历到d的时候,需要把第一个d后面的v保留,再形成一个"vd"子串,这样还是无重复子串。不保留v的话,就不是一个完整的无重复子串了
        if len(r) > maxNum: maxNum = len(r)
        return maxNum

s="dvdf"
a=Solution()
print(a.lengthOfLongestSubstring(s))
 我的解释代码里面写的很清楚。
运行效果还不错

C语言版的先不写了吧,我已经花了快两个小时了。按照这个思路写,完全没问题。

 

猜你喜欢

转载自www.cnblogs.com/albert-yzp/p/9695107.html