#778(Div.1 + Div.2)
B题目信息
解题思路
1.首先题目的思路就是让你从一个字符串的左边开始寻找,如果当前位置的字符在其后面也可以找到(后面有重复的),那么可以删掉这个字符;
2.直到遇见第一个字符他的后面没有重复的字符,立马停止查找,并且输出剩余的字符串;
3.用一个数组记录每个字符出现的次数
(一道水题,但是我超时四次)(蒟蒻,呜呜呜)
#include <iostream>
#include <cstdio> //标准输入输出头文件
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2 * 1e5 + 10;
char s[N]; //字符串
int num[N]; //用于记录这个字符出现的次数
void solve()
{
memset(num, 0, sizeof(num));
scanf("%s", &s);
int len = strlen(s); //记录字符串的长度
for(int i = 0; i < len; i++)
{
num[s[i]]++; //用于记录当前位置字符出现的次数
}
for(int i = 0; i < len; i++)
{
if(num[s[i]] == 1) //如果当前字符只出现过一次,说明就要从这里往后输出剩下的字符串;
{
printf("%s\n", &s[i]);//输出剩下的字符串
break; //结束
}
num[s[i]] --; //如果当前字符后面有重复的,那么数量减一接着循环
}
}
int main()
{
int t;
scanf("%d", &t); //t组测试用例
while( t -- )
{
solve();
}
return 0;
}