题意是给你一个字符串问最少删除个数使得字符串变得合法
合法:索引为奇数的等于后一个数比如aabb为合法
害 还是刷题刷少了 这题一眼没啥思路的,感谢某位大佬QAQ
然后我想了一些乱七八糟的思路 都不太对感觉
可以看作是一个集合的形式,集合里不得有两个一样的,因为两个一样的就可以匹配了
比如 aba ,第一个a加入集合b也加进去(a和b不能匹配),第三个又是a,第三个a可以和第一个a匹配,这里只匹配了这么一个,因为保证集合里不会有重复,所以每次匹配只能匹配一个 然后cnt+=size-1,b没法匹配呀,就删掉吧,类似的abcda,abab都可以推出来
abab注意这里aba的时候已经匹配a,b已经删掉,所以第二个b是开始并不是匹配
保证一一匹配,随时匹配随时删
不用真正实现删过程(也不好写)
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#define IOS ios::sync_with_stdio(false), cin.tie(0);
#include<iostream>
#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef pair<int,int> PAII;
typedef long long ll;
const int N=2e6+10,M=5050,INF=0x3f3f3f3f;
set<int> s;
int main(){
IOS;
int T;
//T=1;
cin>>T;
while(T--)
{
s.clear();
string ch;
cin>>ch;
int cnt=0;
for(int i=0;i<ch.size();i++)
{
if(s.count(ch[i]))
{
cnt+=s.size()-1;
s.clear();
}
else s.insert(ch[i]);
}
cnt+=s.size();
cout<<cnt<<"\n";
}
return 0;
}
/*
*/