一道还算有趣的题目
题意
给你一个字符串A,要求把这个字符串删掉一些字符得到另一个字符串B,将B的最后两个字符放到最前面和原来的B相等
思路
把式子在纸上写出来然后画一画就知道,最后的等式肯定第一位第二位和第三位第四位相等,第三位第四位和第五位第六位相等。。。。倒数第n-4位倒数第n-3位和倒数第n-2和倒数第n-1位相等。
类似abababababab
这种形式
而且最后一位必须以b结尾
这么算下来只有10*10种情况直接暴力即可
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
int ans=1e9+7;
int n=s.size();
for(int i=0; i<=9; i++)
{
for(int j=0; j<=9; j++)
{
int temp=1;
int add=0;
for(int k=0; k<=n-1; k++)
{
if(s[k]==i+'0'&&temp==1)
{
temp=2;
add++;
}
else if(s[k]==j+'0'&&temp==2)
{
temp=1;
add++;
}
}
if(add%2!=0&&i!=j)
add=add-1;
ans=min(ans,n-add);
}
}
cout<<ans<<endl;
}
}
有一个小失误:
一开始是这么写的
然后WA2,后来发现aaaaaaaaa
这种形式也是可以的,而且不需要最后一位是b,也就是说add不需要是偶数,那就加个特判就可以了。