HRZ英語を学ぶ

タイトル:HRZで英語を学ぶ
タイトル:ここに画像の説明を挿入
入力:タイトルの説明と一致する文字列を1行だけ入力します。

出力:出力は1行のみです。そのようなサブストリングがある場合は出力してください。それ以外の場合は-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;
    }
}
PGZ
公開された34元の記事 ウォンの賞賛0 ビュー863

おすすめ

転載: blog.csdn.net/qq_43653717/article/details/105396126