C - Good String
题意: 给定一个只包含0-9的字符串,要求删去最少的字符使得剩下的子序列是good,当且仅当
t
2
t
3
…
t
n
−
1
t
n
t
1
t_2 t_3 \dots t_{n - 1} t_n t_1
t2t3…tn−1tnt1 和
t
n
t
1
t
2
t
3
…
t
n
−
1
t_n t_1 t_2 t_3 \dots t_{n - 1}
tnt1t2t3…tn−1 相同。
思路: 可以证明要么两位不同的数循环出现,或者数字都一样两种情况才满足good的条件,所以直接枚举两位数字循环,选取最长的子序列即可。注意判断长度。
Code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
IO;
int T; cin>>T;
while(T--){
string s;
cin>>s;
int n = s.size();
int ans=0;
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
int num=0,flag=1;
for(int k=0;k<n;k++){
if(s[k]-'0'==(flag?i:j)) num++,flag^=1;
}
if(num%2==1&&i!=j) num--; //当i!=j时,num不能为奇数
ans = max(ans,num);
}
}
cout<<n-ans<<"\n";
}
return 0;
}