[LeetCode] 159. Longest Substring with At Most Two Distinct Characters
Given a string s, return the length of the longest substring that contains at most two distinct characters.
Example 1:
Input: s = “eceba”
Output: 3
Explanation: The substring is “ece” which its length is 3.
Example 2:
Input: s = “ccaabbb”
Output: 5
Explanation: The substring is “aabbb” which its length is 5.
Constraints:
1 <= s.length <= 105
s consists of English letters.
至多包含两个不同字符的最长子串。
题意是给一个字符串,请返回一个最长子串的长度,子串至多包含两个不同字符的最长子串。
思路 - 滑动窗口,类似76题
这题依然是用到 sliding window 的思想。给左右两个指针,并且创建一个 hashmap,key 是遍历到的字母,value 是字母最后一次出现位置的 index。扫描的时候,一开始只让右指针移动,把遍历到的字母和当前的坐标值加入hashmap。此时最大子串的长度就是左右指针的间距。当右指针遍历到第三个不同字母的时候,需要扫描hashmap,找到value(记为leftmost)最小的那个key并且删除这个键值对。此时左指针的位置是leftmost + 1。
复杂度
时间O(n)
空间O(1) - 虽然有 hashmap 但是 size 很小,只有 26 个字母
代码
Java实现
1 |
|
JavaScript实现
1 |
|
[LeetCode] 159. Longest Substring with At Most Two Distinct Characters
https://shurui91.github.io/posts/2079065207.html