leetcode003无重复字符的最长子串
二月 20, 2020
leetcode003无重复字符的最长子串-我自己的理解
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。
做出来很容易,直接两个for暴力就能解决。但是有更快的方法。假设i为左窗口,j为右窗口。假设Sj’与窗口内的某个值Si重复了,那么这个时候把i+1作为左窗口,继续操作。
下面注释的地方是我理解解题思路后,自己写的过程,发现是一个坑。
1 | public int lengthOfLongestSubstring(String s) { |
这道题我看了解题思路我还是花了两个小时去写出时间复杂度低答案,思考的过程真累啊,还好最后是弄明白了。在这先立个flag,leetcode 1/100。
两天后的补充。
两天后我再看这道题发现还是有点难算,难点在于i=Math.max那一行,还是没想出来。但是我想出来了比较相近的一种算法,这次不会再让左窗口跳跃,而是一个一个的加,直到右窗口对应的值不在窗口里面。5ms。
1 | public int lengthOfLongestSubstring(String s) { |
查看评论