题目描述:
给我们一个长度为n的字符串,我们想要知道相同字母之间的最短距离是多少(输出一个最小值即可)。
注:字母只有a~z26个小写字母,每个字符串都保证至少有一对字母相同。
题目输入:
输入第一行为一个整数 n,(字符的个数)。
第二行输入长度为n的字符串。
题目输出:
输出一个整数
#include<bits/stdc++.h>
#define M(a,b) memset(a,b,sizeof a)
#define LL long long
using namespace std;
const int maxn=5000007;
char a[maxn];
stack<char>q;
int n,m;
int main()
{
while(!q.empty())q.pop();
scanf("%s %d",a,&m);
n=strlen(a);
int cnt=0;
int flag=n;
for(int i=0; i<n; i++)
{
if(q.empty())q.push(a[i]);
else
{
if(a[i]>q.top())q.push(a[i]);
else
{
while(!q.empty()&&q.top()>a[i])
{
q.pop();
cnt++;
if(cnt>=n-m)
{
flag=i;
break;
}
}
q.push(a[i]);
}
}
if(cnt>=n-m)break;
}
string ans="";
for(int i=n-1;i>flag;i--)ans+=a[i];
while(!q.empty())ans+=q.top(),q.pop();
reverse(ans.begin(),ans.end());
ans=ans.substr(0,m);
cout<<ans<<"\n";
}
真的不会wa求大佬帮我喵喵喵