zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    shell习题第21题:计算数字的个数
    shell习题第20题:统计文件大小
    萌新小白
    编程第一天
    萌新报道
    linux下安装php扩展pdo_oci和oci8
    安装Hadoop伪分布式踩过的坑
    zabbix安装过程
    MySQL_索引
    mysql复制
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4280624.html
Copyright © 2011-2022 走看看