题目
题意
给定一个字符串,选择一个在字符串中至少出现一次的字符(从“a”到“z”),并在循环中按字母顺序将字符串中的所有此类字符替换为前一个字符。例如,将所有“c”替换为“b”,或将所有“a”替换为“z”。
得到整数k,可将字符串操作k次,找到最小字典上可能的字符串。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int t;
cin >> t;
while (t--) {
int n,k;cin>>n>>k;
string s; cin >> s;
int con[26]={0};
for(int i=0;i<n;i++){
if(s[i]!='a'){
int q=s[i]-'a';//将字符转换成整型存入数组中
while(k&&q&&!con[q]){//若字符已经被转换,或者已经达到最大操作数,或已经将此字符转到最小,
con[q--]=1;//标记已经转换的字符位置
k--;//操作数-1
}
}
}
for(int i=0;i<n;i++)
while(con[s[i]-'a']) s[i]--;//字符转换
cout<<s<<endl;
}
return 0;
}