week8 CSP模擬B HRZ學英語

2021-10-04 21:05:19 字數 1567 閱讀 8660

給定乙個只含26個大寫英文本母和』?'的字串,找出乙個連續的且由26個大寫字母組成的串,在這個子串中每個字母都只出現一次 '?'可以當做任何字母

如果有,輸出最靠左且字典序最小的子串

如果沒有 輸出"-1"

input

乙個字串(len<=106)

output

子串或"-1"

sample input 1

abc??fghijk???opqr?tuvwxy?

sample output 1

abcdefghijklmnopqrstuvwxyz

sample input 1

aabcdefghijklmnopqrstuvw??m

sample output 1

-1

我的思路:

這道題是要找到一段連續的無重複的26字母序列,且字典序最小。可以設定兩個指標left和right,向右移right,記錄得到的字母和字母數量(當遇到『?』時,字母數量加一,然後接著往後走),當right得到的字母w之前遇到過,則left向右走,直到移到第一次出現的w之後的字母為止。根據這樣的規則,當得到字母數達到26時,滿足條件;或者到最後也未找到結果,則不滿足要求。最後,在處理『?』的問題上,可以建立乙個佇列,對於記錄字母的陣列,從前往後遍歷,遇到未占用的則壓入佇列。在輸出結果時,遇到『?』則從佇列首提取出字母進行輸出。

我的總結:

對於連續的問題,可以利用左右指標的思想來解決。

我的**:

#include

#include

#include

using

namespace std;

string st;

int lef,rig,num=

0,is[26]

;queue<

char

> wen;

void

init()

intmain()

if(!is[

int(st[rig])-

65])else

is[int(st[lef])-

65]=0

; lef++

; num--;}

}if(num==26)

for(

int i=lef;i)else cout<}else cout<<

"-1"

;return0;

}

WEEK8 csp模擬 B HRZ學英語

瑞神今年大三了,他在寒假學會了英文的26個字母,所以他很興奮!於是他讓他的朋友tt考考他,tt想 到了乙個考瑞神的好問題 給定乙個字串,從裡面尋找連續的26個大寫字母並輸出!但是轉念一想,這樣太便宜瑞神了,所以他加大了難度 現在給定乙個字串,字串中包括26個大寫字母和特殊字 符 特殊字元 可以代表任...

Week8 CSP模擬 T1HRZ的序列

相較於咕咕東,瑞神是個起早貪黑的好孩子,今天早上瑞神起得很早,刷b站時看到了乙個序列a,他對這個序列產生了濃厚的興趣。他好奇是否存在乙個數k,使得一些數加上k,一些數減去k,一些數不變,使得整個序列中所有的數相等。其中對於序列中的每個位置上的數字,至多只能執行一次加運算或減運算或是對該位置不進行任何...

程式設計思維(CSP模擬題)B HRZ 學英語

瑞神今年大三了,他在寒假學會了英文的26個字母,所以他很興奮!於是他讓他的朋友tt考考他,tt想到了乙個考瑞神的好問題 給定乙個字串,從裡面尋找 連續的26個大寫字母 並輸出!但是轉念一想,這樣太便宜瑞神了,所以他加大了難度 現在給定乙個字串,字串中包括26個大寫字母和特殊字元 特殊字元 可以代表任...