第四题,lengthOfLongestSubstring

Question:

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.

Code:

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        滑动窗口方法,把字符存入,然后检查后面的字符是不是在其中,如果在其中就把substring滑动到在发现重复的后面。
        并计算substring长度,存入最长长度值。直到循环结束。
        """
        longest = 0
        string_list = list(s)
        print(string_list)
        # substring先初始化为空
        char_list = []
        for i in range(len(s)):
            # 当前字符
            current_char = string_list[i]
            # 如果当前字符在 substring中
            if current_char in char_list:
                # 则把substring往后移到发现重复字符之后,重复之前包含重复字符的全部丢弃
                char_list = char_list[char_list.index(current_char) + 1:len(char_list)]
            # 并把这次发现的重复的那个字符存入substring(以后可能不会再有重复的)
            char_list.append(current_char)
            print(char_list)
            # 把最长的susstring长度存入longest
            if len(char_list) > longest:
                longest = len(char_list)
        return longest



str1 = "abcabcbb"
str2 = "bbbbbb"
str3 = "pwwkew"

s = Solution()
print(s.lengthOfLongestSubstring(str1))

print(s.lengthOfLongestSubstring(str2))

print(s.lengthOfLongestSubstring(str3)

 

Result:

['a', 'b', 'c', 'a', 'b', 'c', 'b', 'b']
['a']
['a', 'b']
['a', 'b', 'c']
['b', 'c', 'a']
['c', 'a', 'b']
['a', 'b', 'c']
['c', 'b']
['b']
3
['b', 'b', 'b', 'b', 'b', 'b']
['b']
['b']
['b']
['b']
['b']
['b']
1
['p', 'w', 'w', 'k', 'e', 'w']
['p']
['p', 'w']
['w']
['w', 'k']
['w', 'k', 'e']
['k', 'e', 'w']
3

这是最优化之后的算法。不用三次循环,也不用一个一个排除。直接把重复的substring前面全部丢到。

转载于:https://my.oschina.net/u/3784241/blog/2999801

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值