HRZ学英语

题目:HRZ学英语
题意:在这里插入图片描述
输入:输入只有一行,一个符合题目描述的字符串。

输出:输出只有一行,如果存在这样的子串,请输出,否则输出-1

样例:
在这里插入图片描述

解题思路:一看1e6,好,直接暴力可以过;从头开始搜,若出现符合情况的26个单词,判断一下最小的字符序输出就行了;

代码:

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int a[26]={0};//a数组标记字母是否被选过
string y="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string sol(string m)
{
    for(int i=0;i<m.size();i++)
    {
        if(m[i]=='?')
        {
            for(int j=0;j<26;j++)
            {
                if(a[j]==0)//从头开始搜,看哪个没被标记
                {
                    m[i]=y[j];
                    a[j]=1;//标记一下
                    break;
                }
            }
        }
    }
    return m;
}
int main()
{
    string t;
    cin>>t;
    int q=0;
    for(int i=0;i<t.size();i++)//从头开始
    {
        memset(a,0,sizeof(a));
        int flag=0;
        string m="";
        for(int j=i;j<i+26;j++)//直接搜索
        {
            m+=t[j];
            if(t[j]!='?')//判断一下
            {
                if(a[int(t[j]-'A')]==0)//如果为0,通过
                {
                    a[int(t[j]-'A')]=1;
                }else//不然gg
                {
                    flag=1;
                    break;
                }
            }
        }
        if(flag==0)//通过的话,找最小字符序
        {
            q=1;
            string h=sol(m);
            cout<<h;
            break;
        }
        if(i+26==t.size())//上界
        {
            break;
        }
    }
    if(q==0)
    {
        cout<<-1;
    }
}
发布了34 篇原创文章 · 获赞 0 · 访问量 863

猜你喜欢

转载自blog.csdn.net/qq_43653717/article/details/105396126