RocksonLee's Blog
avatar
RocksonLee
2022-03-21 13:44:31

Problem

Luogu

Codeforces

Solution

搜索一个前缀然后如果这个前缀在后面出现过就可以删除

如果搜索到没有出现过的前缀则算法停止

前缀可以是一串字符串也可以是 一个字母

所以,我们需要记录每个字母出现的第一个位置,那个位置往后就是答案

因此,从后往前搜索,如果字母没有出现过的,记录位置,即是答案

Code

#include <bits/stdc++.h>
using namespace std;

#define il inline
#define INF 0x3f3f3f3f
#define cl(a, b) memset(a, b, sizeof(a))
typedef long long ll;
typedef unsigned long long ull;

map<char, int> mp;

int ans, t, len;

char s[200200];

int main()
{
    scanf("%d", &t);
    for (int kkz = 0; kkz < t; kkz++)
    {
        ans = 0;
        scanf("%s", s);
        len = strlen(s);
        for (int i = len - 1; i >= 0; i--)
        {
            mp[s[i]]++;
            if (mp[s[i]] == 1) ans = i;
        }
        for (int i = ans; i < len; i++)
        {
            printf("%c", s[i]);
        }
        printf("\n");
        mp.clear();
    }
    return 0;
}
CF 1654B Prefix Removals
comment评论
Search
search