1 条题解

  • 1
    @ 2023-12-23 9:53:32

    双指针

    #include <bits/stdc++.h>
    using namespace std;
    
    unordered_map<char,int> um;
    int maxn,minl;
    
    int main()
    {
        string s;
        cin >> s;
        int l=0,r=0;
        while(l<=r && r<s.length())
        {
            if(um[s[r]])
            {
                um[s[l]]--;
                l++;
            }
            else
            {
                um[s[r]]++;
                r++;
            }
            if(r-l>maxn)
            {
                maxn = r-l;
                minl = l;
            }
        }
        for(int i = minl;i<minl+maxn;i++)
            cout << s[i];
        return 0;
    }
    
    s = input()
    maxn,minl = 0,0
    dic = {}
    l,r = 0,0
    for i in s:
        dic[i] = 0
    while l<=r and r<len(s):
        if dic[s[r]]:
            dic[s[l]]-=1
            l+=1
        else:
            dic[s[r]]+=1
            r+=1
        if r-l>maxn:
            maxn = r-l
            minl = l
    
    print(s[minl:minl+maxn])
    
    • 1

    信息

    ID
    769
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    263
    已通过
    111
    上传者