Python練習筆記 - - 彩色寶石項鍊
阿新 • • 發佈:2018-11-11
Python練習筆記 - - 彩色寶石項鍊
題目描述
有一條彩色寶石項鍊,是由很多種不同的寶石組成的,包括紅寶石,藍寶石,鑽石,翡翠,珍珠等。有一天國王把項鍊賞賜給了一個學者,並跟他說,你可以帶走這條項鍊,但是王后很喜歡紅寶石,藍寶石,紫水晶,翡翠和鑽石這五種,我要你從項鍊中擷取連續的一小段還給我,這一段中必須包含所有的這五種寶石,剩下的部分你可以帶走。如果無法找到則一個也無法帶走。請幫助學者找出如何切分項鍊才能夠拿到最多的寶石。
輸入描述:
我們用每種字元代表一種寶石,A表示紅寶石,B表示藍寶石,C代表紫水晶,D代表翡翠,E代表鑽石,F代表玉石,G代表玻璃等等,我們用一個全部為大寫字母的字元序列表示項鍊的寶石序列,注意項鍊是首尾相接的。每行代表一種情況。
輸出描述:
輸出學者能夠拿到的最多的寶石數量。每行一個
示例
輸入
ABCYDYE
ATTMBQECPD
輸出
1
3
解題思路&程式碼段
解題思路:通過每次對字串左移一位,構造出新的字串,然後再判包含’ABCDE’的斷最小段。
python3
s = input()
l = len(s)
#最小子串初始化為整個字串長度
min = l
# 查詢包含'ABCDE'最短的字串
for i in range(l):
x = []
for j in 'ABCDE':
#找到'A、B、C、D、E'在字串中第一次出現的位置
x.append(s.find(j))
#對'A、B、C、D、E'中字元第一次出現的下標進行排序
x.sort()
#min表示包含'ABCDE'的最短子串
if min > x[-1]:
min = x[-1 ]
#更改字元排序使其左移一位,則包含'ABCDE'最短的字串會做一次開頭,所以能找到min
s = s[1:] + s[0]
print(l-min-1)