题意介绍
给定一个由大写的26个英文字母以及’?‘组成的字符串,求第一个由连续的26个字母组成的字符串,其中要求每个字母只能出现一次,并且’?'可以代表任意一个字母。
题意分析
从字符串的第一位开始,每次截取26个字符组成一个字符串,遍历该字符串,如果有一个字符出现不止一次,就停止遍历,否则,遍历完之后将’?'的位置填上一个没有出现过的字符即可。
通过代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int arr[26] = { 0 };
bool flag;
string str, s;
int main()
{
cin >> str;
for (int i = 0; i < str.size() - 25; i++)
{
for (int j = 0; j < 26; j++)
arr[j] = 0;
flag = false;
s = str.substr(i, 26);
for (int j = 0; j < 26; j++)
{
if (s[j] - 'A' >= 0 && s[j] - 'A' < 26)
arr[s[j] - 'A']++;
if (arr[s[j] - 'A'] >= 2) flag = true;
}
if (flag) continue;
for (int i = 0; i < 26; i++)
{
if (arr[i] == 0)
{
int c = s.find('?');
s[c] = (char)(i + 'A');
}
}
cout << s;
return 0;
}
cout << "-1" << endl;
return 0;
}