题目链接:http://codeforces.com/problemset/problem/716/B
题意:给一个字符串,问你这个字符串的所有子串中有没有一个长度为26的子串包含所有的26个大写字母。其中问号可以代表任意字符。
没有的话输出-1,有的话吧?补成字母后输出整个字符串。
Special Judge.
就枚举瞎暴力,跑出来就随便打,跑不出来就-1.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
char s[50100];
int main() {
scanf("%s", s);
int i, j;
char k;
int len = strlen(s);
int F = 0;
set<char> st;
for(i = 0; i < len - 25; i++) {
st.clear();
int cnt = 0;
int flag = 1;
for(j = i; j < i + 26; j++) {
if(s[j] == '?') cnt++;
else {
if(!st.count(s[j])) st.insert(s[j]);
else {
flag = 0;
break;
}
}
}
if(flag && st.size() + cnt == 26) {
F = 1;
break;
}
}
if(F) {
for(j = i; j < i + 26; j++) {
if(s[j] == '?') {
for(k = 'A'; k <= 'Z'; k++) {
if(!st.count(k)) {
st.insert(k);
s[j] = k;
break;
}
}
}
}
for(i = 0; i < len; i++) {
if(s[i] == '?') putchar('A');
else printf("%c", s[i]);
}
puts("");
}
else puts("-1");
return 0;
}