Description

大家都知道小宇是一个很纯洁的小孩!有一天他做梦了,梦见好多MM排着队随他挑。这些MM来自不同的国家,但也有同一个国家的,而他想尽量认识不同国家的MM。因此小宇想知道他可以认识到不同国家的MM区间长度的最大值,并且小宇想知道共有多少个国家的MM供他选择。

题目来了:

现在有多个MM,给出她们所在的国家的标号(标号仅由1个小写字母组成,不同的字母表示不同的国家)。她们按顺序从左到右站成一排。小宇想找到一个区域,使他能够找到最多不同国家的MM,要求输出所有MM属于多少个不同的国家和可以认识不同国家MM的最大区间长度(该区间内没有来自同一个国家的MM)。比如在整个队伍内他按从左向右顺序找到了3a国的MM1bMM1个cMM。那么不同国家的最大数为3a国、b国、c国),最大可以认识不同国家MM的区间长度为3(只须认识a国的最右面的一个人以及bc国即可得到最大区间长度3)。假设在队伍内的人他都还没有认识。

Input

输入一行为一串由小写字母组成的MM队列,表示MM来自的不同国家。

Output

输出数据为一行,包含两个整数,第一个整数所有供小宇选择的MM来自多少个国家。第二个整数代表小宇能找到不同国家MM的最大区间长度。

Sample Input

aaabc

Sample Output

3 3

 暴力求解  借助set去重

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    while(getline(cin,s))
    {
        set<char>st;
        int n,m;
        int len=s.size();
        for(int i=0; i<len; i++)
            st.insert(s[i]);
        cout<<st.size()<<' ';
        st.clear();
        int ans=0;
        int tmp=0;
        int cnt=0;
        for(int i=0; i<len; i++)
        {
            for(int j=i; j<len; j++)
            {
                if(!st.count(s[j]))
                {
                    st.insert(s[j]);
                    tmp++;
                    ans=max(tmp,ans);
                }
                else
                {
                    tmp=0;
                    st.clear();
                    break;
                }
            }
        }
        cout<<ans<<'\n';
    }
    return 0;
}