- 信息學(xué)競(jìng)賽寶典:基礎(chǔ)算法
- 張新華 胡向榮 葛陽(yáng)編著
- 948字
- 2023-06-29 17:02:08
1.1.4 字符串的展開(kāi)
【上機(jī)練習(xí)】字符串的展開(kāi)(expand)NOIP 2007
如果在輸入的字符串中含有類(lèi)似于“d-h”或者“4-8”的子串,我們就把它當(dāng)作一種簡(jiǎn)寫(xiě)。輸出時(shí),用連續(xù)遞增的字母或數(shù)字串替代其中的“-”,即將上面的兩個(gè)子串分別輸出為“defgh”和“45678”。在本題中,我們通過(guò)增加一些參數(shù),使字符串的展開(kāi)更為靈活。約定如下。
(1)遇到下面的情況需要進(jìn)行字符串的展開(kāi):在輸入的字符串中,出現(xiàn)了“-”,“-”兩邊同為小寫(xiě)字母或同為數(shù)字,且按照ASCII的順序,“-”右邊的字符嚴(yán)格大于左邊的字符。
(2)參數(shù)p1:當(dāng)p1=1時(shí),對(duì)于字母子串,填充小寫(xiě)字母;p1=2時(shí),對(duì)于字母子串,填充大寫(xiě)字母(這兩種情況下數(shù)字子串的填充方式相同);p1=3時(shí),不論是字母子串還是數(shù)字子串,都用與要填充的字母或數(shù)字個(gè)數(shù)相同的星號(hào)“*”來(lái)填充。
(3)參數(shù)p2:填充字符的重復(fù)個(gè)數(shù)。p2=k表示同一個(gè)字符要連續(xù)填充k次。例如當(dāng)p2=3時(shí),子串“d-h”應(yīng)擴(kuò)展為“deeefffgggh”。“-”兩邊的字符不變。
(4)參數(shù)p3:確定是否改為逆序。p3=1表示維持原來(lái)順序,p3=2表示采用逆序輸出,注意這時(shí)候仍然不包括“-”兩邊的字符。例如當(dāng)p1=1、p2=2、p3=2時(shí),子串“d-h”應(yīng)擴(kuò)展為“dggffeeh”。
(5)如果“-”右邊的字符恰好是左邊字符的后繼,刪除中間的“-”,例如“d-e”應(yīng)輸出為“de”,“3-4”應(yīng)輸出為“34”。如果“-”右邊的字符按照ASCII的順序小于或等于左邊的字符,輸出時(shí),保留中間的“-”,例如“d-d”應(yīng)輸出為“d-d”,“3-1”應(yīng)輸出為“3-1”。
【輸入格式】
第1行為用空格分隔的3個(gè)正整數(shù),依次表示參數(shù)p1、p2、p3。
第2行為字符串,僅由數(shù)字、小寫(xiě)字母和“-”組成,行首和行末均無(wú)空格。
【輸出格式】
只有一行,為展開(kāi)后的字符串。
【輸入樣例1】
1 2 1
abcs-w1234-9s-4zz
【輸出樣例1】
abcsttuuvvw1234556677889s-4zz
【輸入樣例2】
2 3 2
a-d-d
【輸出樣例 2】
aCCCBBBd-d
【輸入樣例3】
3 4 2
di-jkstra2-6
【輸出樣例3】
dijkstra2************6
【數(shù)據(jù)規(guī)模】
40%的數(shù)據(jù)滿足:字符串長(zhǎng)度不超過(guò)5。
100%的數(shù)據(jù)滿足:1≤p1≤3,1≤p2≤8,1≤p3≤2,字符串長(zhǎng)度不超過(guò)100。
【算法分析】
雖然這是一道簡(jiǎn)單的模擬題,但是細(xì)節(jié)要考慮周全,例如“-”可能出現(xiàn)在字符串的第一個(gè)或最后一個(gè),也可能連續(xù)出現(xiàn)。
此外,對(duì)于字符c來(lái)說(shuō),判斷它是否為小寫(xiě)英文字母可以用islower(c),判斷它是否為大寫(xiě)英文字母可以用isupper(c),判斷它是否為數(shù)字可以用isdigit(c),將之轉(zhuǎn)為小寫(xiě)字母可以用tolower(c),將之轉(zhuǎn)為大寫(xiě)字母可以用toupper(c)。
- GAE編程指南
- PHP程序設(shè)計(jì)(慕課版)
- Learning C++ Functional Programming
- Vue.js 3.0源碼解析(微課視頻版)
- The DevOps 2.5 Toolkit
- 劍指大數(shù)據(jù):企業(yè)級(jí)數(shù)據(jù)倉(cāng)庫(kù)項(xiàng)目實(shí)戰(zhàn)(在線教育版)
- Linux Shell核心編程指南
- Babylon.js Essentials
- 搞定J2EE:Struts+Spring+Hibernate整合詳解與典型案例
- Java圖像處理:基于OpenCV與JVM
- Python趣味編程與精彩實(shí)例
- Python自然語(yǔ)言理解:自然語(yǔ)言理解系統(tǒng)開(kāi)發(fā)與應(yīng)用實(shí)戰(zhàn)
- SQL Server 2012 數(shù)據(jù)庫(kù)應(yīng)用教程(第3版)
- 開(kāi)發(fā)者測(cè)試
- Kudu:構(gòu)建高性能實(shí)時(shí)數(shù)據(jù)分析存儲(chǔ)系統(tǒng)