leetcode[159]Longest Substring with At Most Two Distinct Characters

找到最多含有两个不同字符的子串的最长长度。例如:eoeabc,最长的是eoe为3,其他都为2.

例如:string s="aqaqedadcdccd";

使用一个map<char,int>  fmap记录每个字符出现的个数,详解在程序中注释。

int lengthOfLongestSubstringTwoDistinct(string s)
{
    int begin=0,size=0,res=0;
    map<char,int> fmap;
    for (int i=0;i<s.size();i++)
    {
        //if 每出现一个在fmap中没有的新字符,将其加入map中,并将记录从begin到i间不同字符个数的size加1
        if(!fmap.count(s[i]))
        {
            fmap[s[i]]=0;
            size++;
        }
        fmap[s[i]]++;
        //当begin到i的字符串中不同字符个数超过2,则选择其中最早结束的那个字符的下一个字符作为新的begin,同时更新不同字符个数size
        while (size>2)
        {
            fmap[s[begin]]--;
            if (fmap[s[begin]]==0)
            {
                fmap.erase(s[begin]);
                size--;
            }
            begin++;
        }
        res=res>(i-begin+1)?res:(i-begin+1);
    }
    return res;
}
时间: 2024-10-22 14:21:00

leetcode[159]Longest Substring with At Most Two Distinct Characters的相关文章

leetcode 159. Longest Substring with At Most Two Distinct Characters 求两个字母组成的最大子串长度 --------- java

Given a string, find the length of the longest substring T that contains at most 2 distinct characters. For example, Given s = "eceba", T is "ece" which its length is 3. 给一个字符串,求这个字符串中,由两个字母组成的,连续的最长子串的长度. 虽然是hard,但是感觉并没有什么难度. 用ch1和pre

[LeetCode] 340. Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

Given a string, find the length of the longest substring T that contains at most k distinct characters. For example, Given s = “eceba” and k = 2, T is "ece" which its length is 3. 159. Longest Substring with At Most Two Distinct Characters 的拓展,1

【LeetCode】Longest Substring with At Most Two Distinct Characters (2 solutions)

Longest Substring with At Most Two Distinct Characters Given a string, find the length of the longest substring T that contains at most 2 distinct characters. For example, Given s = “eceba”, T is "ece" which its length is 3. 这个题很显然使用双指针进行遍历的,beg

[LeetCode] 340. Longest Substring with At Most K Distinct Characters

Given a string, find the length of the longest substring T that contains at most k distinct characters. Example 1: Input: s = "eceba", k = 2 Output: 3 Explanation: T is "ece" which its length is 3. Example 2: Input: s = "aa",

[LC] 159. Longest Substring with At Most Two Distinct Characters

Given a string s , find the length of the longest substring t  that contains at most 2 distinct characters. Example 1: Input: "eceba" Output: 3 Explanation: tis "ece" which its length is 3. Example 2: Input: "ccaabbb" Output:

159 Longest Substring with At Most Two Distinct Characters

这两题有一个 trick 和 Minimum Window Substring 非常像,就是维护一个 "curCount" 代表目前 (i,j) 之间 match 上的数量,而通过 hash[] 的正负充当计数器的作用 public int lengthOfLongestSubstringTwoDistinct(String s) { int maxSize = 0; int j = 0; int[] hash = new int[256]; int distinctCount = 0

LeetCode – Refresh – Longest Substring with At Most Two Distinct Characters

At first beginning, I was trying to use hash set to record the characters. But I found that was wrong. Because if there are couple same chars, when you erase it, you lost all the information and cause the result wrong. Note: size > 2 not size > 1 cl

[LeetCode] Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

Given a string, find the length of the longest substring T that contains at most k distinct characters. For example, Given s = “eceba” and k = 2, T is "ece" which its length is 3. 这道题是之前那道Longest Substring with At Most Two Distinct Characters的拓展

LeetCode &quot;Longest Substring with At Most K Distinct Characters&quot;

A simple variation to "Longest Substring with At Most Two Distinct Characters". A typical sliding window problem. class Solution { public: int lengthOfLongestSubstringKDistinct(string s, int k) { unordered_map<char, unsigned> hm; int ret =