B-HRZ学英语
题目描述
题目思路
这个题目很简单,是一个小模拟题,其中包含对字符串的操作。
我们只需要每次从输入字符串str中截取包含26个字符的子串,然后每次去统计这个字符串中各个字符的数量,如果满足A~Z的所有字符中,每个字符的数量都不超过1,这样就满足要求,然后我们就找到?对应的位置,将A ~Z中字符数量为0的字符按照字典序从小到大替换掉即可。
这里我在模测的时候由于没有看清题目,题意理解错误而导致出错了,有点不应该。
代码实现
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define _for(i,a,b) for(int i = (a); i < (b); i++)
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXN = 1e6 + 10;
string str,ans;
int num[30];
bool flag;
int main()
{
ios::sync_with_stdio(false);
cin >> str;
_for(i,0,str.size()-25)
{
memset(num,0,sizeof(num));
flag = true;
ans = str.substr(i,26);
_for(j,0,26)
{
if(ans[j] != '?')
num[ans[j]-'A']++;
if(num[ans[j]-'A'] > 1) flag = false;
}
if(!flag) continue;
_for(j,0,26)
{
if(num[j] == 0)
ans[ans.find('?')] = 'A' + j;
}
cout << ans;
return 0;
}
cout << -1;
return 0;
}