a087: 交錯字串 (Alternating Strings)
標籤 : 20171028 APCS Q2
通過比率 : 19人/20人 ( 95% ) [非即時]
評分方式:
Tolerant

最近更新 : 2021-11-16 10:04

內容

一個字串如果全由大寫英文字母組成,我們稱為大寫字串;如果全由小寫字母組成 則稱為小寫字串。

字串的長度是它所包含字母的個數,在本題中,字串均由大小寫英文字 母組成。假設 k 是一個自然數,一個字串被稱為「k-交錯字串」,如果它是由長度為 k 的 大寫字串與長度為 k 的小寫字串交錯串接組成。

舉例來說,「StRiNg」是一個 1-交錯字串,因為它是一個大寫一個小寫交替出現;而 「heLLow」是一個 2-交錯字串,因為它是兩個小寫接兩個大寫再接兩個小寫。

但不管 k 是多少,「aBBaaa」、「BaBaBB」、「aaaAAbbCCCC」都不是 k-交錯字串。

本題的目標是對於給定 k 值,在一個輸入字串找出最長一段連續子字串滿足 k-交錯 字串的要求。

例如 k=2 且輸入「aBBaaa」,最長的 k-交錯字串是「BBaa」,長度為 4。

又 如 k=1 且輸入「BaBaBB」,最長的 k-交錯字串是「BaBaB」,長度為 5。

請注意,滿足條件的子字串可能只包含一段小寫或大寫字母而無交替,如範例二。 此外,也可能不存在滿足條件的子字串,如範例四。

輸入說明

輸入的第一行是k,第二行是輸入字串,字串長度至少為1,只由大小寫英文字母組成(A~Z, a~z)並且沒有空白。

輸出說明

輸出輸入字串中滿足 k-交錯字串 的要求的最長一段連續子字串的長度,以換行結尾。

範例輸入 #1
1 
aBBdaaa
範例輸出 #1
2
範例輸入 #2
3 
DDaasAAbbCC
範例輸出 #2
3
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (25%): 1.0s , <1K
公開 測資點#1 (25%): 1.0s , <1K
公開 測資點#2 (25%): 1.0s , <1K
公開 測資點#3 (25%): 1.0s , <1K
提示 :

根據定義,要找的答案是大寫片段與小寫片段交錯串接而成。本題有多種解法的思 考方式,其中一種是從左往右掃描輸入字串,我們需要紀錄的狀態包含:目前是在小寫子 字串中還是大寫子字串中,以及在目前大(小)寫子字串的第幾個位置。根據下一個字母的大小寫,我們需要更新狀態並且記錄以此位置為結尾的最長交替字串長度。 另外一種思考是先掃描一遍字串,找出每一個連續大(小)寫片段的長度並將其記錄在 一個陣列,然後針對這個陣列來找出答案。

標籤:
20171028 APCS Q2
出處:
APCS [管理者: ]


編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」